gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:44:58 25 4
gpt4 key购买 nike

最近我遇到了 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)(没有子字符串,它会给我 Invalid character ) 它给了我 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 文件的有趣讨论:

Current working directory when running a Jar

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

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

关于编译时Java没有在源代码中获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24834511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com