0

类似的问题涉及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(未使用)
  • 一个.txt
  • b.txt(与导入时相同的错误a.txt,仅以下一行)
  • /images(文件夹,包含 icon.png)

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

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

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

4

3 回答 3

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
}
于 2013-02-08T17:22:48.940 回答
1

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

public Scanner(File source) throws FileNotFoundException

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

因此,您必须将它们附在try/catch声明中:

Scanner in = null;
try {
  in = new Scanner(file);
}
catch (FileNotFoundException e) {
  e.printStackTrace();
}
于 2013-02-08T17:22:56.487 回答
0

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

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

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

于 2013-02-08T17:25:48.387 回答