我有一个名为 的文本文件foo.txt
,其内容如下:
这
是
文本
我如何在 Java 7 中将这个确切的文件打印到屏幕上?
在 Java 7 之前:
BufferedReader br = new BufferedReader(new FileReader("foo.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
从 Java 7 开始,不需要关闭流,因为它实现了autocloseable
try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
为什么没有人认为值得一提 Scanner?
Scanner input = new Scanner(new File("foo.txt"));
while (input.hasNextLine())
{
System.out.println(input.nextLine());
}
此处的每个示例都显示了使用 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 东欧),但 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();
}
对于那些刚接触 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()
}
}
使用 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
地方还是在其他地方。