是否有必要在循环时创建缓冲读取器以及所有读取单行文件?它也永远不会改变
答案 0 :(得分:3)
我将如何做到这一点:
String txt = new Scanner(new File(path)).useDelimiter("\\Z").next();
这会将整个文件读入String。
让我为你打破这个:
String txt = // the resulting String is stored here
new Scanner( // Create a scanner to read the file
new File( "pathToFile" ) ) // pass a new file to the scanner to read
.useDelimiter("\\Z") // set the delimiter to the end of the file
.next(); // read the scanner until the next delimiter,
// in this case it is the end of the file.
答案 1 :(得分:1)
java.util.Scanner可让您更轻松地阅读文件。还记得org.apache.commons.io.FileUtils
答案 2 :(得分:0)
如果您不关心正确的字符转换,可以使用InputStream,而不是使用Reader类:
表演讨论:
http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly
答案 3 :(得分:0)
正如标题本身所说,是否有必要在循环时创建缓冲读取器以及所有读取单行文件?它也永远不会改变
不是绝对没有必要,如果文件真的 总是一行而永远不会更改。
如果文件实际上总是一行,你可以只读第一行;即无需循环。
如果文件真的没有改变,你甚至可能不需要阅读它;即你可以将单行内容嵌入程序本身。
然而,实际上,你的两个假设都可能是假的。始终存在可能性,文件可能包含更多行(或为空),或者它可能包含与您期望的不同的内容。至少,如果您的程序至少检查它的假设是无效的,那将是一个好主意。例如:
BufferedReader br = ...
// Read contents of a 1 line file.
String line = br.readLine();
if (line == null || line.length() == 0) {
System.out.println("where's my input?");
} else if (br.readLine() != null) {
System.out.println("too much input!");
} else {
...
}
此外,正如其他人所提到的,还有其他方式可以阅读/解析输入,而不仅仅是使用BufferedReader
。这取决于你在从文件中读取的行所做的事情。
编辑
java中是否包含某些内容?
不在核心库中。但是IIRC有一个名为FileUtils的Apache commons实用程序类,它有各种方法来执行此类操作。例如,有些方法将整个文件读取为字节数组或字符串,另一种方法读取文件并将这些行作为字符串数组返回。
(但是,嘿,为什么你会为这些微不足道的东西添加第三方依赖?只有六行Java代码才能自己正常工作!!)