我有一个名为foo.txt
的文本文件,其内容如下:
this
is
text
如何在Java 7中将此文件的内容精确打印到屏幕上?
我有一个名为foo.txt
的文本文件,其内容如下:
this
is
text
如何在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);
}
}
new InputStreamReader(
new FileInputStream(pathToFile)
, <encoding>)
,而不是FileReader
。 - Jiri Kremser为什么没有人觉得值得提到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 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
中或其他地方。对于那些刚接触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()
}
}