4

最近我遇到了 Java 的问题。我已经尝试了一些我在网上找到的东西,但它们没有奏效,所以我需要帮助。我在 Eclipse 中有一个 Java 项目。我的主要课程在src/programCode/UI_Main2.java. 在那.java我尝试访问一个文件src/files/File.file

这就是事情变得奇怪的时候。

  • 如果我使用/src/files/File.file它会给我NoSuchFileException.

  • 如果我src/files/File.file在 Eclipse 中使用它,但是当我将它编译为可执行的 .jar 时,它会给我 .jar NoSuchFileException

  • 如果我使用/files/File.file它会给我NoSuchFileException.

  • 如果我使用files/File.file它会给我NoSuchFileException.

  • 如果我使用files/File.file它会给我NoSuchFileException.

  • 如果我使用this.getClass().getResource("/files/File.file").getPath().substring(1) (没有子字符串,它给了我无效字符)它给了我NoSuchFileException(但它向我显示了绝对路径并且文件存在于那里!)

  • 如果我使用this.getClass().getResource("files/File.file").getPath()它会给我NullPointerException并且程序崩溃。

  • 如果我使用this.getClass().getResource("src/files/File.file").getPath()它会给我NullPointerException并且程序崩溃。

  • 如果我使用this.getClass().getResource("/src/files/File.file").getPath()它会给我NullPointerException并且程序崩溃。

所以,我不知道该怎么办。src/files/File.file是唯一有效的,但在编译为可执行 jar 时不起作用。所以请帮助我,我还没有找到任何解决方案。谢谢!

4

2 回答 2

3

查找文件取决于两件事:

  • 无论您使用绝对路径还是相对路径
  • 你的工作目录在哪里

在类 Unix 系统下,当您像/dir1/dir2/file使用绝对路径一样使用路径时,您的工作目录并不重要,但您必须在该路径下有一个文件。

在您的情况下,您尝试使用相对路径,因此您不应该/在开始时使用。

这种情况对您的问题至关重要:

"If I use src/files/File.file it works in Eclipse but when I compile it to a executable .jar it gives me NoSuchFileException." 

默认情况下,Eclipse 使用父目录src(通常是您的项目的目录)作为工作目录,因此从那里开始,您确实在该路径下有一个文件。

当您启动.jar您的工作目录时,它位于其他地方。把你.jar的父目录,src它应该工作。

现在,我建议您将文件的位置更改为src(调用它Resurces或其他)以外的目录,并将其与.jar.

.jar此外,这里有一个关于工作目录和文件的有趣讨论:

运行 Jar 时的当前工作目录

如果您想分发单个.jar,这里有一个很好的打包说明:

http://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/pack_resources_in_jar.html

于 2014-07-18T22:26:06.220 回答
1

假设您的意图是在您自己的开发计算机上运行您编译的程序,您需要提供所需文件的完整路径。那条完整的路径将是形式

<Eclipse workspace location>\<project name>\<file location in project>
于 2014-07-18T22:18:45.223 回答