最近我遇到了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时不会。所以,请帮助我,我还没有找到任何解决方案。
谢谢!
答案 0 :(得分: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
的父目录作为工作目录(通常是你的项目和#34;,所以从那里开始你确实在那条路径下有一个文件。
当您启动.jar
时,您的工作目录位于其他位置。将您的.jar
放到src
的父目录中,它应该有效。
现在,我建议您将文件的位置更改为src
以外的目录(称之为Resurces
或其他内容),并将其与.jar
一起提供。
此外,这是一个关于工作目录和.jar
文件的有趣讨论:
Current working directory when running a Jar
如果你想分发一个.jar
,这是一个很好的包装说明:
http://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/pack_resources_in_jar.html
答案 1 :(得分:1)
假设您打算在自己的开发计算机上运行已编译的程序,则需要提供所需文件的完整路径。完整路径的形式为
<Eclipse workspace location>\<project name>\<file location in project>