Java: печать содержимого текстового файла на экран

У меня есть текстовый файл с именем foo.txt, и его содержимое выглядит следующим образом:

это

является

текст

Как я могу напечатать этот точный файл на экране в Java 7?

Ответ 1

Перед Java 7:

 BufferedReader br = new BufferedReader(new FileReader("foo.txt"));
 String line = null;
 while ((line = br.readLine()) != null) {
   System.out.println(line);
 }
  • добавить обработку исключений
  • добавить закрытие потока

Начиная с Java 7, нет необходимости закрывать поток, поскольку он реализует autocloseable

try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
   String line = null;
   while ((line = br.readLine()) != null) {
       System.out.println(line);
   }
}

Ответ 2

Почему никто не думал, что стоит упомянуть Сканер?

Scanner input = new Scanner(new File("foo.txt"));

while (input.hasNextLine())
{
   System.out.println(input.nextLine());
}

Ответ 3

С помощью Java 7 try-with-resources ответ Jiri может быть улучшен на:

try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
   String line = null;
   while ((line = br.readLine()) != null) {
       System.out.println(line);
   }
}

Добавьте обработку исключений по вашему выбору, либо в этот try, либо в другое место.

Ответ 4

Для тех, кто не знаком с Java, и задается вопросом, почему ответ Jiri не работает, убедитесь, что вы делаете то, что он говорит, и обрабатываете исключение, иначе он не будет компилироваться. Здесь минимальный минимум:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadFile {

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        for (String line; (line = br.readLine()) != null;) {
            System.out.print(line);
        }
        br.close()
    }
}

Ответ 5

В каждом примере показано решение с помощью FileReader. Это удобно, если вам не нужно заботиться о кодировке файлов. Если вы используете некоторые другие языки, кроме английского, кодирование очень важно. Представьте, что у вас есть файл с этим текстом

Příliš žluťoučký kůň
úpěl ďábelské ódy

и файл использует формат windows-1250. Если вы используете FileReader, вы получите следующий результат:

P��li� �lu�ou�k� k��
�p�l ��belsk� �dy

Итак, в этом случае вам нужно будет указать кодировку как Cp1250 (Windows Eastern European), но FileReader не позволяет это делать. В этом случае вы должны использовать InputStreamReader для FileInputStream.

Пример:

String encoding = "Cp1250";
File file = new File("foo.txt");

if (file.exists()) {
    try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding))) {
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
else {
    System.out.println("file doesn't exist");
}

Если вы хотите прочитать символ файла после символа, не используйте BufferedReader.

try (InputStreamReader isr = new InputStreamReader(new FileInputStream(file), encoding)) {
    int data = isr.read();
    while (data != -1) {
        System.out.print((char) data);
        data = isr.read();
    }
} catch (IOException e) {
    e.printStackTrace();
}