Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由于Windows和Linux之间的路径结构不同,JPackage出现问题_Java_Linux_Java 14_Jpackage - Fatal编程技术网

Java 由于Windows和Linux之间的路径结构不同,JPackage出现问题

Java 由于Windows和Linux之间的路径结构不同,JPackage出现问题,java,linux,java-14,jpackage,Java,Linux,Java 14,Jpackage,在Windows上,我刚刚将我的应用程序安装程序从Izpack转换为JPackage,由于JPackage创建的结构,我不得不进行一些代码更改,以允许我的应用程序查找各种配置文件,基本上,在第一次启动时,它们会从app文件夹复制到C:\Users\Username\Appdata….(但要复杂一点) 我现在在Linux上使用JPackage,应用程序将配置文件从app复制到$HOME/.appname。然而,在Windows上,app是相对于Linux的launcher的子文件夹,它现在位于。/

在Windows上,我刚刚将我的应用程序安装程序从Izpack转换为JPackage,由于JPackage创建的结构,我不得不进行一些代码更改,以允许我的应用程序查找各种配置文件,基本上,在第一次启动时,它们会从app文件夹复制到C:\Users\Username\Appdata….(但要复杂一点)

我现在在Linux上使用JPackage,应用程序将配置文件从app复制到$HOME/.appname。然而,在Windows上,app是相对于Linux的launcher的子文件夹,它现在位于。/lib/app,因此代码不起作用


因此,我必须进行一些特定于linux的更改,但这让我想知道,为了让我不得不进行这些更改,我是否在这里做了一些非常错误的事情?

加载配置文件的一种方法是使用类加载器:这些文件与应用程序的其余部分打包在一个jar中,您将它们作为流而不是文件加载:

    Properties properties = new Properties();
    InputStream stream = YourApplication.class.getResourceAsStream("/resources/conf.properties");
    properties.load(stream);
路径(示例)
/resources/conf.properties
与捆绑文件的.jar文件相对,因此它不依赖于安装文件夹


上面的示例假设您使用的是属性文件,但这适用于您可以作为流加载的任何资源。

但用户有时需要编辑它们,因此存储在jar中不是解决方案。我让它按原样工作,但仍然怀疑我的方法是否错误,或者Oracle是否在这里做出了错误的选择。啊,好吧,如果用户可以编辑这些,我想你必须处理平台之间的差异。但是如果您询问文件的初始副本,那么答案是正确的:您应该从.jar加载默认文件并将其保存为file@PaulTaylor嵌入默认配置(如Guillaume所述)然后将其复制到用户位置不是更合适吗(例如用户主页、特定于平台的应用程序数据位置等)根据需要?将文件复制到安装位置似乎有问题,可能只是因为您在该位置可能有写权限,也可能没有写权限。无论如何,您可能可以在中找到一些内容。您可能有一点,但让我进一步解释。在第一次运行程序时,我会将配置文件复制到用户位置,但我会从insta复制文件我的问题是复制到用户位置的代码在进行初始复制时必须考虑位置的差异。如果配置文件在jar文件中,我仍然会有位置不同的问题,但我想如果jar在类路径上,那么我就不必担心关于这一点,只是简单地复制一些文件而已。关键是,从jar加载文件时,您不需要知道jar的位置,因此您不需要知道安装位置。