IT-Swarm.Net

Java:将文本文件的内容打印到屏幕

我有一个名为foo.txt的文本文件,其内容如下:

这个

文本

如何在Java 7中将此确切文件打印到屏幕上?

13
user2151887

在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);
   }
}
30
Jiri Kremser

快速,可靠且价格合理的云托管

注册并在30天内获得$50奖金!

为什么没有人认为值得一提的是Scanner?

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

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

使用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或其他地方添加。.

2
Dariusz

对于那些刚接触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()
    }
}
2
Joe

此处的每个示例都显示了使用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不允许您这样做。在这种情况下,您应该在FileInputStream上使用InputStreamReader。.

示例:

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();
}
1
vitfo