2013-04-20 70 views
2

Java新手在这里!为什么我的程序在文件存在时捕获/抛出FileNotFoundException?

我正在写一个程序来练习阅读输入和写入输出到文件。我已经完成了对程序的编码,但是当我运行它时,程序会捕获并继续执行FileNotFoundException。

该文件位于该程序的源文件夹中,我甚至尝试将它放在与该程序相关的每个文件夹中。我已经试过:

  • 声明的方法头
  • 周边的部分功能于问题与try/catch块的异常。
  • 以上两者在一起。

下面是导致问题的相关代码。有什么突出的,我失踪了?

public static void main(String[] args) throws FileNotFoundException { 

    Scanner keyboard = new Scanner(System.in); 

    String playerHighestScore = "", playerLowestScore = ""; 
    int numPlayers = 0, scoreHighest = 0, scoreLowest = 0; 

    System.out.println("Enter an input file name: ");    
      String inputFileName = keyboard.nextLine();     

    String outputFileName = getOutputFileName(keyboard, inputFileName);  
    File inputFile = new File(inputFileName); 
    try { 
     Scanner reader = new Scanner(inputFile); 
     reader.close(); 
    } 
    catch (FileNotFoundException exception) {  
     System.out.println("There was a problem reading from the file.");     
     System.exit(0); 
    } 

    Scanner reader = new Scanner(inputFile); 
    PrintWriter writer = new PrintWriter(outputFileName); 
+2

为了更快地获得更好的帮助,请发布[SSCCE](http://sscce.org/)。顺便说一句 - 沿着'File f = new File(“。”)的方向在该方法中进行一些调试。 System.out.println(f.getCanonicalPath());'并检查它指向你期望的位置。 – 2013-04-20 04:16:12

+0

我几乎肯定它与路径有关。这是什么操作系统,你是否逃避斜线(Windows的反斜杠,否则正斜杠)? (例如C:\ Some Directory \ file.txt是错误的,它应该是** C \\:某个目录\\ file.txt)** – Don 2013-04-20 04:31:13

+0

另外,由于您刚开始时,我建议使用固定一个用于测试程序的String对象,而不是手工输入(例如'String file =“C:\\ Some Directory \\ file.txt”;'比您进入控制台的东西更容易发现错误路径很容易弄乱,因为每当你手工输入时,它就会让事情变得更容易,但这只是我的看法而已,我不想阻止你试验因为这就是你学习的方式。 – Don 2013-04-20 04:36:33

回答

0

答案很简单。如果得到FilENotFoundException,显然原因是在给定路径中找不到文件。
如果使用IDE,工作目录的路径与源目录不同。
例如,如果您使用NetBeans,您的源文件位于/src之内。但是你的工作目录(.)是项目目录。
另一方面,问题可能是@Don提到的问题。如果您要采用跨平台方法,则可以在路径中使用“/”。它的工作原理与操作系统无关。
例如:String fileName = "C:/Directory/File.txt";
而这些路径区分大小写。所以请确保你使用正确的案例。 (在Windows中,这不会是一个问题,除非你打包该程序。)

相关问题