Из-за моей неопытности в 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;
}
}
}
}