2012-10-27 59 views
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); 
     } 
    } 
} 
+0

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

+0

当我通过C:\\ etc \\ etc \ workspace \ Project \\ src \\ input.txt指定路径位置时,它可以工作,但是当我输入input.txt时,它没有找到它 – BubbleTree

回答

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()。这一行已经被阅读了。

+0

我扔在ioexception在顶部,它表示无法找到文件路径,尽管它与程序位于同一目录中。 – BubbleTree

+0

当我通过C:\\ etc \\ etc \ workspace \ Project \\ src \\ input.txt指定路径位置时,它可以工作,但是当我输入input.txt时,它找不到它。 – BubbleTree

+0

input.txt是一个相对于java启动目录的路径。这与您的课程目录无关。 –

1

你进行双读取

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

您在while条件中读取行,然后尝试后,立即读取另一行,大概是碰到文件

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

0

您每次循环重复时都读两行。删除循环中包含的

s=in.readLine(); 

0

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

然而,如果内存是不是一个问题,你正在使用Java 7,你可能有兴趣在Files.readAllLines

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

从文档:

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

使用此方法的好处是,它可以抽象出详细信息,为您处理关闭文件并且通常更易于使用。