Вопрос-ответ

Reading a plain text file in Java

Чтение простого текстового файла на Java

Кажется, существуют разные способы чтения и записи данных файлов в Java.

Я хочу прочитать данные ASCII из файла. Каковы возможные способы и их различия?

Переведено автоматически
Ответ 1

Мой любимый способ чтения небольшого файла - использовать BufferedReader и StringBuilder. Это очень просто и по существу (хотя и не особенно эффективно, но достаточно хорошо для большинства случаев).:

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();

while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}

Некоторые указывали, что после Java 7 вам следует использовать функции try-with-resources (т. Е. автоматического закрытия):

try(BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();

while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
}

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

Хотя, если я хочу на самом деле просто прочитать файл в виде строки, я всегда использую Apache Commons IO с классом IOUtils .Метод toString() . Вы можете ознакомиться с исходным кодом здесь:

http://www.docjar.com/html/api/org/apache/commons/io/IOUtils.java.html

FileInputStream inputStream = new FileInputStream("foo.txt");
try {
String everything = IOUtils.toString(inputStream);
} finally {
inputStream.close();
}

И еще проще с Java 7:

try(FileInputStream inputStream = new FileInputStream("foo.txt")) {     
String everything = IOUtils.toString(inputStream);
// do something with everything string
}
Ответ 2

ASCII - это текстовый файл, поэтому вы должны использовать Readers для чтения. Java также поддерживает чтение из двоичного файла с помощью InputStreams. Если считываемые файлы огромны, то вы хотели бы использовать a BufferedReader поверх a FileReader для повышения производительности чтения.

Прочитайте эту статью о том, как использовать Reader

Я бы также порекомендовал вам скачать и прочитать эту замечательную (пока бесплатную) книгу под названием Мышление на Java

В Java 7:

new String(Files.readAllBytes(...))

(документы)
или

Files.readAllLines(...)

(документы)

В Java 8:

Files.lines(..).forEach(...)

(документы)

Ответ 3

Самый простой способ - использовать Scanner класс в Java и объект FileReader . Простой пример.:

Scanner in = new Scanner(new FileReader("filename.txt"));

Scanner имеет несколько методов чтения в строках, числах и т.д... Вы можете найти дополнительную информацию об этом на странице документации Java.

Например, чтение всего содержимого вString:

StringBuilder sb = new StringBuilder();
while(in.hasNext()) {
sb.append(in.next());
}
in.close();
outString = sb.toString();

Также, если вам нужна определенная кодировка, вы можете использовать это вместо FileReader:

new InputStreamReader(new FileInputStream(fileUtf8), StandardCharsets.UTF_8)
Ответ 4

Вот простое решение:

String content = new String(Files.readAllBytes(Paths.get("sample.txt")));

Или для чтения в виде списка:

List<String> content = Files.readAllLines(Paths.get("sample.txt"))
java