Java 在编译时未获取源代码中的文件



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

中的文件

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

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

  • 如果我使用src/files/File.file,它在Eclipse中工作,但当我将其编译为可执行的。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时,它不能工作。所以请帮帮我,我还没找到解决办法。谢谢!

查找文件取决于以下两点:

  • 使用绝对路径还是相对路径
  • 工作目录在哪里

在类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/江户/Classes/CS477_WWW/Docs/pack_resources_in_jar.html

假设您的目的是在您自己的开发计算机上运行已编译的程序,那么您需要提供所需文件的完整路径。完整路径的格式为

<Eclipse workspace location><project name><file location in project>

相关内容

  • 没有找到相关文章

最新更新