0

我有一个更复杂的程序,涉及使用文本文件中写入的内容,但它根本不起作用,没有显示任何内容,一切都依赖于文件。如果我只是使字符串等于我的代码中的某些内容并摆脱从文件中读取的内容,那么它就可以工作。我尝试了一些简单的方法,比如显示读取的行,但运行它时它不显示任何内容。

编辑:它找不到文件的路径......默认文件通常在哪里?该文件与程序在同一目录中,但找不到它,为什么?

public static void main(String[] args) {
    String s;
        try {
            FileReader fstream=new FileReader("input.txt");
            BufferedReader in=new BufferedReader(fstream);

        while((s=in.readLine())!=null){
        System.out.print(s);


        }}catch(IOException e){
            System.exit(0);
        }
    }
}
4

4 回答 4

3

不要忽略异常。如果没有读取任何内容,则可能引发了异常。与其让它冒泡并告诉你出了什么问题,不如抓住它并默默地退出。这就像购买火警并将其音量设置为 0:您永远不会知道发生了火灾。

将您的程序转换为

public static void main(String[] args) throws IOException {
    String s;
    FileReader fstream=new FileReader("input.txt");
    BufferedReader in=new BufferedReader(fstream);

    while((s=in.readLine()) != null) {
        System.out.print(s);
    }
}

看看会发生什么。

此外,我删除了循环内对 readLine() 的调用。此时该行已被读取。

于 2012-10-27T23:25:38.180 回答
1

您正在执行双重阅读

while((s=in.readLine())!=null){
    s=in.readLine();

您在 while 条件内读取该行,然后尝试在其后立即读取另一行,大概是到达文件末尾

尝试删除第二个 in.readLine() 语句

于 2012-10-27T23:26:24.527 回答
0

每次循环重复时,您都在阅读两行。去除那个

s=in.readLine(); 

包含在循环中。

于 2012-10-27T23:27:13.217 回答
0

正如其他人所提到的,您以两倍的检查率错误地读取行。他们的解决方案解决了问题的根源。

但是,如果内存不是问题并且您使用的是Java 7,您可能会对Files.readAllLines感兴趣

List<String> lines = Files.readAllLines(path, Charset.defaultCharset() );

从文档:

从文件中读取所有行。此方法确保在读取所有字节或引发 I/O 错误或其他运行时异常时关闭文件。使用指定的字符集将文件中的字节解码为字符...请注意,此方法适用于在单个操作中方便读取所有行的简单情况。它不适用于读取大文件

使用此方法的好处是它抽象了细节,为您处理关闭文件,并且通常更易于使用。

于 2012-10-27T23:30:01.580 回答