Мне нужно получить и удалить случайную строку из txt-файла (той же строки). До сих пор я придумал следующий код:Java: извлечение и удаление случайной строки из текстового файла
public String returnAndDeleteRandomLine(String dir) throws FileNotFoundException, IOException {
try (BufferedReader br = new BufferedReader(new FileReader(dir))) {
//StringBuilder sb = new StringBuilder();
//System.out.println("Value of line before while() " + line);
ArrayList fileContents = new ArrayList();
int maxLines = 0;
String line = br.readLine();
//System.out.println("Value of line before while() " + line);
while (line != null) {
fileContents.add(line.toString());
line = br.readLine();
//System.out.println("Value of line is: " + line);
}
System.out.println("Value of maxLines() " + maxLines);
Random rand = new Random();
int randomNumber = rand.nextInt(maxLines - 1) + 1;
System.out.println("Value of randomNumber: " + randomNumber);
int lineNumber = randomNumber;
if (fileContents.isEmpty()) {
return null;
} else System.out.println("Value of random line: " + fileContents.get(randomNumber).toString());
return fileContents.get(randomNumber).toString();
}
}
Но у меня все по-разному возникают ошибки. Самая последняя ошибка:
Значение MaxLines() 0 Исключение в потоке "основного" java.lang.IllegalArgumentException: оценка должна быть положительной при java.util.Random.nextInt (Unknown Source) в TransmitToFile.returnAndDeleteRandomLine (TransmitToFile.java:247) в Main.main (Main.java:98)
Я не мог работать даже на удалении линии, потому что я до сих пор не удалось получить линию.
Если файл пуст (MAXLINES = 0), это решение все равно не получится, так что вы также должны сделать чек, если (MaxLines = 0) возвращение; или что-то. Наверное, не большая проблема в реальной жизни, но стоит отметить. – Astrogat