Перечитывание небольшого текстового файла на Java

Из-за моей неопытности в Java (я изучал ее только последние два месяца для школы) я столкнулся с проблемой.

Я делал эту программу "оскорбительная машина" для одного из моих друзей, в шутку. Программа обращается к текстовому файлу и находит, сколько в нем строк. Затем он генерирует число от 1 до максимального номера строки, сохраняет весь текст в массиве и выводит текст в этом номере строки. Пользователь также может создавать оскорбления, и текстовый файл обновляется новым оскорблением.

Когда я теперь запускаю его оскорбительную часть (я использую BufferedReader, может быть, есть более простой способ?), а его позиция все еще находится внизу текстового файла, и я не могу найти способ перечитать текстовый файл снова, чтобы обновить массив. Если я вернусь к оскорбительной части, он выведет NULL, поскольку я достиг конца файла. Любые идеи о том, как это исправить, пожалуйста?

Просто к вашему сведению, чтобы ответить на создание нового BufferedReader, пользователь может переходить назад и вперед по созданию и основной программе, поэтому мне нужно бесконечное количество BufferedReaders.

(Я понимаю, что мой код может быть не самым эффективным, я только начал программировать)

import java.util.Scanner;
import java.io.*;
import java.util.Random;
public class InsultingMachine{
    public static void main(String args[]) throws IOException{
        File insult = new File("insults.txt");
        boolean exist = insult.exists();

        if(exist == false){
            System.out.println("The file does not exist, creating the file...?");
            PrintWriter writer = new PrintWriter("insults.txt", "UTF-8");
            writer.close();
            System.out.println("Done");
        }

        //objects
        Scanner input = new Scanner(System.in);
        Scanner inputIn = new Scanner(System.in);
        Scanner inputIn2 = new Scanner(System.in);
        Random ranGen = new Random();
        BufferedReader reader = new BufferedReader(new FileReader("insults.txt"));
        BufferedReader reader2 = new BufferedReader(new FileReader("insults.txt"));
        BufferedWriter wr = new BufferedWriter(new FileWriter("insults.txt", true));

        //vars
        int i, ranInt;
        int lineNum = 0;
        int lineNum2 = 0;
        int counter = 0, counter2 = 0, counter3 = 0, menuCounter = 0;
        String outputting;
        String s1, s2;

        while (menuCounter == 0){
            System.out.println("Hello, please select an option from the menu: ");
            System.out.println("(1) INSULTS");
            System.out.println("(2) Create insults");
            System.out.println("(3) Exit");

            i = input.nextInt();

            switch(i){
                case 1:
                    //Establish Line Number

                    while(reader.readLine() != null){
                        lineNum++;
                    }
                    //store the lines of the text file
                    String L[] = new String[lineNum];

                    lineNum2 = 0;
                    while(lineNum2 < lineNum){
                        L[lineNum2] = reader2.readLine();
                        lineNum2++;
                    }

                    System.out.println("You may start you fool...Enter an insult --type exit to exit-- :");
                    while (counter == 0){
                        s2 = inputIn.nextLine();

                        if(s2.equalsIgnoreCase("exit")){
                            break;
                        }

                        //generate number from 1 to max line number
                        ranInt = ranGen.nextInt(lineNum);
                        if (ranInt == 0)
                        {
                            ++ranInt;
                        }

                        System.out.println(L[ranInt]);
                    }
                    break;

                case 2:
                    while(counter3 == 0){
                        System.out.println("Please enter the insult you would like to add --type exit to exit-- : ");
                        s2 = inputIn2.nextLine();

                        if(s2.equalsIgnoreCase("exit"))
                        {
                            wr.close();
                            break;
                        }
                        wr.newLine();
                        wr.write(s2);
                    }
                    break;

                case 3:
                    menuCounter++;
                    break;
                default:
                    System.out.println("Please enter a correct value...");
                    break;
            }
        }
    }
}

person Joao Duarte    schedule 17.12.2013    source источник


Ответы (1)


Для чтения файлов построчно используйте Apache Commons IO Library

Общие ресурсы Apache.io

Он имеет класс FileUtils. FileUtils

Он имеет метод readLines(File f) readLines(файл f)

Этот метод прочитает файл и вернет вам список строк, а затем вы можете делать с этим все, что хотите List

person Makky    schedule 17.12.2013