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

在Java中读取单行文件的最佳方法是什么,java,Java,是否有必要创建缓冲读取器while loop和all来读取单行文件?它的常量永不改变使读取文件更容易。还请记住如果您不关心正确的字符转换,您可以使用InputStream,而不是使用Reader类: 绩效讨论: 以下是我的做法: String txt = new Scanner(new File(path)).useDelimiter("\\Z").next(); 这将把整个文件读入字符串 让我来为你解释一下: String txt = // the resulting String is s

是否有必要创建缓冲读取器while loop和all来读取单行文件?它的常量永不改变

使读取文件更容易。还请记住

如果您不关心正确的字符转换,您可以使用InputStream,而不是使用Reader类:

绩效讨论:


以下是我的做法:

String txt = new Scanner(new File(path)).useDelimiter("\\Z").next();
这将把整个文件读入字符串

让我来为你解释一下:

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.
正如标题本身所说,是否有必要创建缓冲读取器while循环和all来读取单行文件?它也是永恒不变的

不,这不是绝对必要的,如果文件是真的始终只有一行并且从不更改

  • 如果文件总是一行,你可以只读第一行;i、 e.无需循环

  • 如果文件确实从未更改,您甚至可能不需要阅读它;i、 e.您可以将单行内容嵌入程序本身

  • 然而,在现实中,你的两个假设可能都是错误的。文件总是可能包含更多行(或为空),或者可能包含与预期不同的内容。至少,如果您的程序至少检查其假设是否无效,这将是一个好主意。例如:

    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中是否有类似于php中包含的内容

    不在核心库中。但是IIRC有一个名为ApacheCommons的实用程序类,它有各种方法来做这类事情。例如,有两种方法可以将整个文件作为字节数组或字符串读取,还有一种方法可以读取文件并将行作为字符串数组返回


    (但是,嘿,你为什么要为这么简单的事情添加一个第三方依赖项呢?你自己只需要半打Java代码就可以完成这项工作!!)

    @Esko Luontola我需要将这个文件(包含一个字符串)读成字符串,这是
    扫描仪的另一个建议。自从文件I/O可用以来,我一直在使用它。@London:
    String myLine=myScanner.nextLine()
    对于更复杂的文件,您可能希望在while循环中使用
    hasNextLine()
    ,但对于您的规范,只需调用
    nextLine()
    就可以了。@Brian S感谢您在我使用字符串myLine=myScanner.nextLine(),然后myLine等于文件名,在我的例子中Scanner scan=newscanner(“HEADER”);它输出标题您使用了错误的扫描仪构造函数-尝试
    Scanner scan=new Scanner(新文件(“标题”)我喜欢你提出的第二点,我不认为我的假设是错误的,因为这是头文件,我只需要包含它,它可能会更改,但我必须手动更改它,它在任何时候都不会追加。在java中是否有像php中包含的东西?@London-你自相矛盾。第一句你说你的假设是正确的;i、 e.文件永不更改。下一句你说你可以手动更改文件。事实上,你的假设是错误的,没有必要的。好吧,现在已经晚了,可能是tnx关于你上面的信息的情况,我不是在讽刺你。。。这会将多行文件作为单行读取。这不是问题所要问的…@Stephen,它像他想要的那样读取整个文件。他刚才提到他的档案只有一行。但这真的不重要。”…像他想要的那样”-但不是像他要求的那样。问题在于他的问题。他需要读取整个文件,但询问在读取单行文件时是否可以避免使用缓冲读取器。因为他上面的评论,我们只知道他到底想要什么。