无法从文件中读取数据

时间:2012-10-27 23:21:44

标签: java

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

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

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 个答案:

答案 0 :(得分: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()的调用。此时已经阅读了该行。

答案 1 :(得分:1)

您正在进行双重阅读

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

你在while条件下读取了这一行,然后尝试在它之后立即读取另一行,可能是在文件的末尾。

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

答案 2 :(得分:0)

每次循环重复时,您正在读取两行。

删除
s=in.readLine(); 

包含在循环中。

答案 3 :(得分:0)

正如其他人所提到的那样,你以两倍的检查速度错误地读取线条。他们的解决方案解决了问题的根源。

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

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

来自文档:

  

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

使用此方法的好处是它可以抽象细节,为您处理文件,并且通常更容易使用。