我应该在哪里放置我的文件,以便在我运行jar时能够访问它们?

我将一些对象存储在文件中,一切都在Netbeans控制台中正常工作。 但是当我通过命令行(java -jar myapp.jar)运行JAR时,我得到了这个:

在此处输入图像描述

我应该在哪里放置文件,以便能够通过命令行运行应用程序?

答案取决于您是否要写入文件…

你可以…

确保文件相对于Jar文件放置并使用相对路径。 这个问题是如果执行上下文与存储jar和文件的目录不同,那么你将无法再找到它们……

这也将取决于您的构建过程,以确保将所有必需的文件放置到Jar的构建位置

你可以…

将文件放在一个众所周知的位置,例如,在Windows上,您可以使用{user.home}/AppData/Local/{application name}或者在Mac上,您可以使用{user.home}/Library/Application Support/{application name}并将文件放在这里,然后你可以使用文件的绝对路径

这可能会成为安装问题,因为您需要确保在安装应用程序时将所有必需的文件复制到所需的位置。

如果文件是在运行时自动生成的,那么您只需要确保目录存在并在不存在的情况下生成它们

你可以…

将文件存储在Jar上下文(AKA嵌入式资源)中,执行此操作的方式取决于您的IDE和构建过程,例如,在Netbeans中,您可以将文件复制到项目的src目录中,它们将自动执行包含在生成的Jar文件中。 我相信Eclipse可以以相同的方式工作。 但是,如果您使用的是Maven,则需要将文件放入resources目录中。

然后,您可以根据需要使用Class#getResourceClass#getResourceAsStream访问这些资源。

但这将使资源成为只读。