最近我遇到了一个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>