【问题标题】:FileNotFoundException while running as Jar - Java作为 Jar 运行时的 FileNotFoundException - Java
【发布时间】:2012-04-10 18:26:41
【问题描述】:

我已经使用 eclipse 编写了我的 java 代码,并且正在读取文件并处理代码。 key.txt 与 src 位于同一文件夹中。

BufferedReader br= new BufferedReader(new FileReader("KEY.txt"));

现在在我编译 jar 并将 jar 和文件放在同一个文件夹中并执行 iam 得到 FilenotFoundException 之后。如果我在 Eclipse 中运行并完美地读取文件,该程序就可以工作。

jar 文件和 key.txt 必须始终位于同一文件夹中。 请告诉我如何解决这个 FilenotFoundException 问题。

【问题讨论】:

  • 您使用的是eclipse,所以您已将此jar 添加为库或简单地放入文件夹中?key.txt 在jar 文件中?你能分享你的文件夹结构吗?
  • 从 jar 运行您的应用程序时,您是否与包含 jar 文件和 txt 文件的目录位于同一目录中?
  • 1) 如果资源是可编辑的,或者是下载后添加的,将KEY.txt放入user.home的子目录(可能基于主类的包)。这是一条可重复的路径,应该是可读可写的。 2)如果是静态的,并且与应用同时在Jar中提供,则通过从this.getClass().getResource("path/name.type")获取的URL访问。

标签: java jar filenotfoundexception


【解决方案1】:

您的代码在当前工作目录中打开一个文件,该目录是您启动 Java 进程的目录。

这与jar文件所在的位置完全无关。

你如何执行jar文件?

如果密钥文件就在 jar 文件旁边,这应该可以:

java -jar theJar.jar     

但这不会(因为密钥的路径现在是“test/KEY.txt”):

java -jar test/theJar.jar 

当您在 Eclipse 中运行程序时,当前工作目录(通常)是项目根文件夹。

要考虑的替代方法(如果用户不需要编辑文件)是将密钥文件放入 jar 文件中。那么它就不会丢失了,你可以通过类加载器来加载它。

另一个不错的选择是让用户通过命令行参数或系统属性提供文件的路径。

或者制作一个批处理文件/shell脚本,确保您始终从正确的目录运行。

【讨论】:

  • 感谢您的回复。那么我应该如何修改我的程序,以便我可以将 jar 和 key.txt 放在同一个文件夹中,而与用户提供的任何文件夹无关。如果它们都在一起,它应该可以工作。请建议。
【解决方案2】:

我认为你应该把这些文件和运行类的class文件放在一起,因为当前目录是存放class文件的目录,而不是源java文件。

【讨论】:

  • 谢谢。让我试着回复你。
猜你喜欢
  • 2017-06-05
  • 1970-01-01
  • 2019-10-19
  • 2023-03-27
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多