我应该把我的文件放在哪里以便在我 运行 jar 时能够访问它们?
Where should i place my files in order to be able to access them when i run the jar?
我将一些对象存储在文件中,在 Netbeans 控制台中一切正常。但是当我通过命令行 运行 JAR (java -jar myapp.jar) 我得到这个:
我应该将文件放在哪里才能通过命令行 运行 应用程序?
答案将取决于您是否要写入文件...
你可以...
确保文件相对于Jar 文件放置并使用相对路径。这样做的问题是,如果执行上下文与存储 jar 和文件的目录不同,您将无法再次找到它们...
这也将取决于您的构建过程,以确保将任何需要的文件复制到 Jar 的构建位置
你可以...
将文件放在一个众所周知的位置,例如,在 Windows 上您可以使用 {user.home}/AppData/Local/{application name}
或在 Mac 上您可以使用 {user.home}/Library/Application Support/{application name}
并放置文件在这里,那么你可以使用文件的绝对路径
这可能会成为安装问题,因为您需要确保在安装应用程序时将任何所需文件复制到所需位置。
如果文件是在运行时自动生成的,那么你只需要确保目录存在,如果不存在则创建它们
你可以...
将文件存储在 Jar 上下文中(也称为嵌入式资源),您执行此操作的方式将取决于您的 IDE 和构建过程,例如,在 Netbeans 中,您可以将文件复制到src
目录,它们将自动包含在生成的 Jar 文件中。我相信 Eclipse 可以以同样的方式工作。但是,如果您使用的是 Maven,则需要将文件放入 resources
目录。
然后您将根据需要使用 Class#getResource
or Class#getResourceAsStream
访问这些资源。
然而,这将使资源变为只读。
我将一些对象存储在文件中,在 Netbeans 控制台中一切正常。但是当我通过命令行 运行 JAR (java -jar myapp.jar) 我得到这个:
我应该将文件放在哪里才能通过命令行 运行 应用程序?
答案将取决于您是否要写入文件...
你可以...
确保文件相对于Jar 文件放置并使用相对路径。这样做的问题是,如果执行上下文与存储 jar 和文件的目录不同,您将无法再次找到它们...
这也将取决于您的构建过程,以确保将任何需要的文件复制到 Jar 的构建位置
你可以...
将文件放在一个众所周知的位置,例如,在 Windows 上您可以使用 {user.home}/AppData/Local/{application name}
或在 Mac 上您可以使用 {user.home}/Library/Application Support/{application name}
并放置文件在这里,那么你可以使用文件的绝对路径
这可能会成为安装问题,因为您需要确保在安装应用程序时将任何所需文件复制到所需位置。
如果文件是在运行时自动生成的,那么你只需要确保目录存在,如果不存在则创建它们
你可以...
将文件存储在 Jar 上下文中(也称为嵌入式资源),您执行此操作的方式将取决于您的 IDE 和构建过程,例如,在 Netbeans 中,您可以将文件复制到src
目录,它们将自动包含在生成的 Jar 文件中。我相信 Eclipse 可以以同样的方式工作。但是,如果您使用的是 Maven,则需要将文件放入 resources
目录。
然后您将根据需要使用 Class#getResource
or Class#getResourceAsStream
访问这些资源。
然而,这将使资源变为只读。