【问题标题】:File not found exception- text based files only未找到文件异常 - 仅基于文本的文件
【发布时间】:2012-08-17 19:50:37
【问题描述】:

完整编辑:是的,我觉得我所看到的明显不是针对不从事这个项目的人,所以这可能会惹恼一些人,但我会在这里重置细节。

原来:- 我的 Eclipse IDE 工作区中有一系列文本文件、图像文件和声音文件。虽然我从 IDE 运行应用程序,但一切都很顺利。使用 File 和 Scanner 类(见下文)加载基于文本的文件(本例中为 .DAT),并由 slick2d 加载图像和声音(见下文):

// Loading a text based file from the IDE workspace
Scanner scanner = new Scanner(new File("text/intro1.DAT"));

// Loading an image and a sound as handled by slick2d
Image background = new Image("images/backgrounds/menuBG.jpg");
Sound bgm = new Sound("sounds/music/MainMenuTheme.wav");

到目前为止一切正常,但是......

导出:- 当我将文件导出到可运行的 jar 时,没有任何文本、声音和图像随之导出。我做了一些研究,了解到如果库的 /lib 文件夹中包含的内容将被导出。这有两个影响:

  • 这破坏了 IDE 中的所有链接。看到现在一切都存在于 ./lib/...
  • 但是,由于 lib 的内容直接导出到 jar 的顶层(至少当我使用 Eclipse 和 JarSplice 这样做时),这 固定 差异。至少在我试图解决的问题之前。

问题:- 查看上面的代码,文本文件夹和声音文件夹在生成的导出 jar 中存在于完全相同的级别。自从他们都工作的IDE以来,那个和路径字符串没有改变。现在,在导出到可运行的 jar 之后,所有声音和图像文件都由 slick2d 成功加载,但所有基于文本的 (.DAT) 文件现在在运行时导致 FileNotFound 异常,即使它们的访问权限尚未改变了。

显然,直接意义上的路径并没有什么问题,因为图像和声音仍在加载中,但错误仍然存​​在。

我以错误的方式访问文件? slick2d 的自我管理方式与尝试以我的方式访问文件之间是否存在某种冲突?

希望这更清楚一点。

【问题讨论】:

  • 只有当您从 jar 文件或您的 IDE 调用代码时才抛出异常?请注意,您发布的 2 段代码是严格等效的,因此获得相同行为是正常的...
  • @Kira Namida 我会尝试输出当前工作目录并列出。
  • 如果文件在 lib 之外(即在 eclipse 工作区中),IDE 会找到它们,但 jar 不会。如果它们在 lib 中,则两者都找不到。但是,直到我将其他所有内容添加到 lib 中,它们才成功导出到 jar 中(也就是说,我在 lib 中也有图像和声音,但是使用相同的 sting 路径可以很好地加载。我什至将图像放入“text”文件夹并从那里加载)。

标签: java filenotfoundexception


【解决方案1】:

既然你说文件已经移动了,我猜你会想要这样的东西

File file = new File("lib/text/intro1.DAT");
Scanner scanner = new Scanner(file);

Scanner scanner = new Scanner(new File("lib/text/intro1.DAT"));

相对文件路径(不以“/”或驱动器号开头的文件路径)从项目/jar 的根目录开始。

【讨论】:

  • 我导出的可运行 jar 文件中没有 lib 文件。 Eclipse IDE 中的 lib 中的所有内容最终都位于 jar 的顶层,因为它是该级别的自己的文件夹。
【解决方案2】:

当指定文件的相对路径时,java 解释相对于当前工作目录的相对路径。当前工作目录是您运行 java 命令的地方。

你应该指定你的文件相对于这个目录的位置。

例子:

   File located at: drive1/files/yourfile
   java run in: drive1/aDir/

   In this case you should specify the file's location as: ./../files/yourfile

【讨论】:

  • 我所有的其他文件都正确加载,它只是非文本文件。虽然这给了我一个小小的启示。请参阅问题更新。
  • 更新没有提供任何新的细节。 “其他文件”的位置是什么?如何在代码中访问它们?
猜你喜欢
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 2019-03-29
  • 2019-06-26
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多