Не используйте DataInputStream
для чтения строк из файла. Вместо этого используйте BufferedReader
, как в:
fis = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
while ((String line = reader.readLine()) != null) {
System.out.println(line);
}
Javadoc на DataInputStream.readLine
говорит вам не использовать этот метод. (устарело)
Конечно, когда вы действительно начинаете читать цифры, я бы посоветовал вам самим забыть о прочтении строк и просто позволить Scanner
прочитать цифры для вас. Если вам нужно узнать, какие номера были в одной строке, Scanner
может сделать это и для вас:
Scanner fileScanner = new Scanner(file, "UTF-8").useDelimiter(" +| *(?=\\n)|(?<=\\n) *");
while (fileScanner.hasNext()) {
List<Integer> numbersOnLine = new ArrayList<Integer>();
while (fileScanner.hasNextInt()) {
numbersOnLine.add(fileScanner.nextInt());
}
processLineOfNumbers(numbersOnLine);
if (fileScanner.hasNext()) {
fileScanner.next(); // clear the newline
}
}
Это причудливое регулярное выражение делает так, чтобы символы новой строки между строками также отображались как токены для Scanner
.