2014-01-23 62 views
-1

有什么不对?为什么它给了我“未报告的异常java.io.FileNotFoundException”?这是我正在学习的一本书的练习,我无法弄清楚什么是错误的,它看起来完全像他们提供的例子。该文件位于相同的文件夹中。什么是错的?为什么它给我未报告的异常java.io.FileNotFoundException?

import java.io.*; 
import java.util.*; 
public class Mine 
{ 
    public static void main(String[] args) 
    { 
     Scanner inFile = 
      new Scanner(new FileReader("Ch3_Ex7Data.txt")); 
     PrintWriter outFile = new PrintWriter("Ch3_Ex7Output.dat"); 

     String lastName; 
     lastName = inFile.next(); 
     System.out.println(lastName); 
     inFile.close(); 
     outFile.close(); 
    } 
} 

Files

+0

在什么文件夹? –

+0

它没有找到您正在尝试阅读的文件。文件在哪里与编译的类文件有关? –

+0

更重要的是,在执行程序时,文件在哪里与当前目录相关? – keshlam

回答

0

FileNotFoundException是一个检查异常。你必须尝试/抓住它。文件是否存在并不重要。 FileNotFoundException扩展IOException,因此您只需要捕获IOException。这应该编译:

import java.io.*; 
import java.util.*; 
public class Mine 
{ 
    public static void main(String[] args) 
    { 
     Scanner inFile = null; 
     PrintWriter outFile = null; 
     try { 
      try { 
       inFile = new Scanner(new FileReader("Ch3_Ex7Data.txt")); 
       outFile = new PrintWriter("Ch3_Ex7Output.dat"); 

       String lastName; 
       lastName = inFile.next(); 
       System.out.println(lastName); 
      } finally { 
       if(inFile != null) 
        inFile.close(); 
       if(outFile != null) 
        outFile.close(); 
      } 
     } catch(IOException ioe) { 
      ioe.printStackTrace(); 
     } 
    } 
} 
+0

林不知道尝试的概念是什么,我还没有知道,但它的工作。非常感谢你! – AwesomeTN

+1

基本上,如果找不到文件,构造函数将抛出此异常。尝试/ catch意味着控制流将跳出,如果有的话,跳到catch块。 (顺便说一句,我用try ...显示的东西... finally ... close并不是完全必要的,但是是一种最佳实践。Java 7+也有[try-with-resources](http://docs.oracle.com/javase /tutorial/essential/exceptions/tryResourceClose.html)来替换成语。)在运行时抛出异常是可能的,在这种情况下@peeskillet建议的可能会有所帮助。相对目录很挑剔。 – Radiodef

1

FileNotFoundException手段,嗯......那么文件不能被发现。

确保"Ch3_Ex7Data.txt"文件是项目根目录的直接子项。当你刚刚使用(“Ch3_Ex7Data.txt”)相对路径时,读取文件,这是IDE将首先搜索的位置。

ProjectRoot 
     Ch3_Ex7Data.txt 
     src 

注:在未来,您将学习不是生产/部署的目的,最好的解决办法,当文件为t成为一个嵌入式的资源,但上面的应该为你工作,直到你深入研究走向生产阶段。


UPDATE到OP评论

“而且我现在应该在其他方法的习惯得到?如果是的话是什么样子”

你”我希望将来能够学习它,但您首先需要了解InputStreams。所以这可能是不成熟的。但是如果你不想了解更多,只需搜索“从jar中读取文本文件”。你会找到答案,那会是这样的

InputStream is = getClass().getResourceAsStream("Ch3_Ex7Data.txt"); 

如果你的文件现在都必须位于类路径,所以你的文件结构将代替从上述结构变更为这个下面

ProjectRoot 
      src 
      Ch3_Ex7Data.txt 
+0

我应该在哪里添加该代码。我现在应该习惯另一种方法吗?如果是这样的话是什么样子?谢谢 – AwesomeTN

+0

这不是代码。这是你的文件结构 –

+0

所有的文件都在同一个文件夹中 – AwesomeTN

相关问题