【问题标题】:Java isn't getting the file in the source code when compiled编译时Java没有在源代码中获取文件
【发布时间】:2014-07-18 22:07:09
【问题描述】:

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

【问题讨论】:

  • 源代码通常不适用于编译的程序,但资源可以。

标签: java file nullpointerexception nosuchfileexception


【解决方案1】:

查找文件取决于两件事:

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

在类 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 文件的有趣讨论:

Current working directory when running a Jar

如果您想分发单个.jar,这里有一个很好的打包说明:

http://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/pack_resources_in_jar.html

【讨论】:

【解决方案2】:

假设您的意图是在您自己的开发计算机上运行您编译的程序,您需要提供所需文件的完整路径。该完整路径的形式为

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

【讨论】:

  • 谢谢,不过我也想在其他电脑上用xD
猜你喜欢
  • 2014-05-28
  • 2015-02-19
  • 1970-01-01
  • 2023-03-16
  • 2013-07-13
  • 2014-10-01
  • 2022-01-17
  • 2016-05-05
  • 2015-03-29
相关资源
最近更新 更多