【问题标题】:FileNotFoundException while file exists in same folder as program文件与程序存在于同一文件夹中时出现 FileNotFoundException
【发布时间】:2013-02-08 17:21:10
【问题描述】:

类似的问题涉及C: 驱动器上的文件,其中硬编码文件路径是可接受的答案。此应用程序是移动应用程序,硬编码文件路径并不实用。

我正在尝试通过扫描仪导入一个文本文件,其中包含一个字符串列表,每个 15 个字符,每行 1 个。很多行。文件名为a.txt

我用它来称呼它

File data = new File("a.txt");
Scanner in = new Scanner(data);

用“b.txt”重复以下行,使用不同的对象名称。

但是,当我构建程序时,我得到了这个错误日志(使用 Jcreator IDE):

--------------------Configuration: <Default>--------------------
E:\Simple Encryption\Simple_Encryption.java:17: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
    Scanner in = new Scanner(data);
                 ^
E:\Simple Encryption\Simple_Encryption.java:18: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
    Scanner numsIn = new Scanner(nums);
                     ^
2 errors

Process completed.

程序在文件夹E:/Simple Encryption/,包含以下文件和文件夹:

  • Simple_Encryption.java
  • Simple_Encryption.class
  • lock.png(未使用)
  • a.txt
  • b.txt(导入时与a.txt相同的错误,仅以下一行)
  • /images(文件夹,包含icon.png)

文件夹中没有其他内容。我无法硬编码文件路径,因为在不同的计算机上,它具有不同的驱动器名称,并且稍后将分布在不同的文件夹下。 (这里(学校),它在E: 驱动器上,在家里它是J:驱动器,而在工作它在G: 驱动器上。)

虽然我已经从现有错误中获得了帮助,但我需要在程序启动时导入它,而不仅仅是跳过它。该文件以其当前形式存在,没有它,程序将无法运行。

是什么导致了这个错误?我能做些什么来防止这种情况发生?

【问题讨论】:

    标签: java java.util.scanner filenotfoundexception


    【解决方案1】:
    E:\Simple Encryption\Simple_Encryption.java:17: unreported exception 
    java.io.FileNotFoundException; must be caught or declared to be thrown
    

    正如您的例外所说,您需要使用 try-catch 块

    try {
       Scanner numsIn = new Scanner(nums);
    catch (FileNotFoundException e) {
      // do something
    } finally {
      if (numsIn != null) numsIn .close();
    }
    

    您需要通过调用方法抛出该异常

    public static void xxxx() throws FileNotFoundException {
       // do something
    }
    

    【讨论】:

      【解决方案2】:

      问题不在于抛出的异常,而是构造函数被声明为抛出FileNotFoundException已检查异常的事实。

      public Scanner(File source) throws FileNotFoundException
      

      由于它是一个已检查的异常,它必须由程序员处理,因为它用于表示可能发生的事情。

      因此,您必须将它们包含在 try/catch 语句中:

      Scanner in = null;
      try {
        in = new Scanner(file);
      }
      catch (FileNotFoundException e) {
        e.printStackTrace();
      }
      

      【讨论】:

        【解决方案3】:

        正如您所说的文件存在,但它指出它找不到该文件。试试这个:

        System.out.println(data.getAbsolutePath());
        

        这应该让您确切知道它在哪里寻找文件,然后您可以在不使用完整路径的情况下调整应用程序

        【讨论】:

          猜你喜欢
          • 2015-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多