Я читал, что у кого-то проблемы с BufferedReader: читатель просто не читает первые строки. Вместо этого у меня противоположная проблема. Например, в текстовом файле с 300 строками он достигает 200, считывает его половину, а затем следующей строке присваивается значение null, поэтому она останавливается.
private void readerMethod(File fileList) throws IOException {
BigInteger steps = BigInteger.ZERO;
BufferedReader br = new BufferedReader(new FileReader(fileList));
String st;
//reading file line by line
try{
while (true){
st = br.readLine();
if(st == null){
System.out.println("Null string at line " + steps);
break;
}
System.out.println(steps + " - " + st);
steps = steps.add(BigInteger.ONE);
}
}catch(Exception e){
e.printStackTrace();
}
finally{
try{
br.close();
}catch(Exception e){}
}
}
Результат предыдущего фрагмента кода будет таким, как ожидалось, пока он не достигнет строки 199 (начиная с 0). Рассмотрим файл с 300 строками.
...
198 - 3B02D5D572B66A82F9D21EE809320DB3E250C6C9
199 - 6E2C69795CB712C27C4097119CE2C5765
Null string at line 200
Обратите внимание, что все строки имеют одинаковую длину, поэтому в этом выводе строка 199 даже не завершена. Я проверил текст файла, он правильный: он содержит все 300 строк и все они одинаковой длины. Кроме того, как видите, в тексте только заглавные буквы и цифры.
У меня вопрос: как я могу это исправить? Мне нужно, чтобы BufferedReader
читал весь текст, а не только его часть.
Как кто-то спросил, я добавляю сюда оставшуюся часть кода. Обратите внимание, что все имена заглавных букв являются константами различного типа (int, string и т. Д.). Это метод, который вызывается основным потоком:
public void init(){
BufferedWriter bw = null;
List<String> allLines = createRandomStringLines(LINES);
try{
String fileName = "SHA1_encode_text.txt";
File logFile = new File(fileName);
System.out.println(logFile.getCanonicalPath());
bw = new BufferedWriter(new FileWriter(logFile));
for(int i = 0; i < allLines.size(); i++){
//write file
String o = sha1FromString(allLines.get(i));
//sha1FromString is a method that change the aspect of the string,
//replacing char by char. Is not important at the moment.
bw.write(o + "\n");
}
}catch(Exception e){
e.printStackTrace();
}finally{
try{
bw.close();
}catch(Exception e){}
}
}
Метод создания списка случайных строк следующий. «СИМВОЛЫ» - это просто строка, содержащая все доступные символы.
private List<String> createRandomStringLines(int i) {
List<String> list = new ArrayList<String>();
while(i!=0){
StringBuilder builder = new StringBuilder();
int count = 64;
while (count-- != 0) {
int character = (int)(Math.random()*SYMBOLS.length());
builder.append(SYMBOLS.charAt(character));
}
String generatedString = builder.toString();
list.add(generatedString);
i--;
}
return list;
}
Обратите внимание, что записанный файл полностью правильный.
LINES
вBufferedReader br = new BufferedReader(new FileReader(fileList), LINES + 1);
? - person Mickael   schedule 09.11.2018BufferedReader
, вы увидите, что размер - это количество знаков, а не количество строк. Я не думаю, что это проблема, но вы должны это исправить. - person Mickael   schedule 09.11.2018198 - E2246565470462093EEFC83E5CCE46B0C9E07C67 199 - ED2AB7058F09C47E822AA5D0D5DFB7C9F Null string at line 200
полная строка 199 - ED2AB7058F09C47E822AA5D0D5DFB7C9F2DC96E3 - person Daniele Buonadonna   schedule 09.11.2018Scanner
:Scanner scan = new Scanner(file); String line; while(scan.hasNextLine()) { line = scan.nextLine(); //... } scan.close();
- person Sofo Gial   schedule 09.11.2018java.nio.file.Files.lines(path)
, который читает все строки из файла какStream
? - person anders   schedule 09.11.2018