怎么了?为什么它给我未报告的异常java.io.FileNotFoundException?

时间:2014-01-23 01:50:58

标签: java

有什么问题?为什么它给我“未报告的异常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

2 个答案:

答案 0 :(得分:1)

FileNotFoundException表示,嗯......然后找不到文件。

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

ProjectRoot
         Ch3_Ex7Data.txt
         src

注意:将来,您将了解到,当文件成为嵌入式资源时,这不是生产/部署目的的最佳解决方案,但上述内容应该适用于您,直到您深入研究生产阶段


更新到OP评论

  

“我现在应该养成其他方法的习惯吗?如果是这样,那会是什么样子”

您将来想要学习它,但首先需要了解InputStreams。所以这可能是不成熟的。但是如果你不想了解更多,只需搜索“从罐子里读取文本文件”。你会找到看起来像这样的答案

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

您的文件现在必须位于类路径中,因此您的文件结构将从上面的结构改为 this

ProjectRoot
          src
             Ch3_Ex7Data.txt

答案 1 :(得分: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();
        }
    }
}