在Java中读取单行文件的最佳方法是什么

时间:2010-07-19 22:57:39

标签: java

是否有必要在循环时创建缓冲读取器以及所有读取单行文件?它也永远不会改变

4 个答案:

答案 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)

  

正如标题本身所说,是否有必要在循环时创建缓冲读取器以及所有读取单行文件?它也永远不会改变

不是绝对没有必要,如果文件真的 总是一行而永远不会更改。

  1. 如果文件实际上总是一行,你可以只读第一行;即无需循环。

  2. 如果文件真的没有改变,你甚至可能不需要阅读它;即你可以将单行内容嵌入程序本身。

  3. 然而,实际上,你的两个假设都可能是假的。始终存在可能性,文件可能包含更多行(或为空),或者它可能包含与您期望的不同的内容。至少,如果您的程序至少检查它的假设是无效的,那将是一个好主意。例如:

    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代码才能自己正常工作!!)