Java在编译时没有在源代码中获取该文件

时间:2014-07-18 22:07:10

标签: java file nullpointerexception nosuchfileexception

最近我遇到了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时不会。所以,请帮助我,我还没有找到任何解决方案。 谢谢!

2 个答案:

答案 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>