Java是';编译时,不要在源代码中获取文件
最近我对Java有一个问题。我试过在网上找到的一些东西,但都没用,所以我需要帮助。 我在Eclipse中有一个Java项目。我的主要类在Java是';编译时,不要在源代码中获取文件,java,file,nullpointerexception,nosuchfileexception,Java,File,Nullpointerexception,Nosuchfileexception,最近我对Java有一个问题。我试过在网上找到的一些东西,但都没用,所以我需要帮助。 我在Eclipse中有一个Java项目。我的主要类在src/programCode/UI\u Main2.java中。在.java中,我尝试访问src/files/file.file中的文件 这就是事情变得奇怪的时候 如果我使用/src/files/File.File它会给我NoSuchFileException 如果我使用src/files/File.File它在Eclipse中工作,但是当我将它编译成一个可
src/programCode/UI\u 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时就不行了。所以,请帮帮我,我还没有找到任何解决办法。
谢谢 假设您的目的是在自己的开发计算机上运行编译的程序,则需要提供所需文件的完整路径。这条完整的路径的形式是
<Eclipse workspace location>\<project name>\<file location in project>
\\
查找文件取决于两件事:
- 使用绝对路径还是相对路径
- 你的工作目录在哪里
在类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
以外的目录(称之为resrces
或其他什么),并将其与.jar
一起提供
此外,这里还有一个关于工作目录和.jar
文件的有趣讨论:
如果要分发单个.jar
,这里有一个很好的打包说明:
源代码通常不适用于已编译的程序,但资源是可用的。谢谢,但我也想在其他计算机上使用它。谢谢,它现在起作用了!但我如何在没有文件夹的情况下在一个.jar中实现这一点?我编译了另一个jar,其中包含文件夹和app jar?下面是一个简单的说明:或者更详细的说明: