如何使用File.separator获取jar文件资源?

时间:2014-07-15 02:32:09

标签: java jar

我正在尝试读取位于jar文件中的属性文件。我想使用File.separator,因为应用程序将在多个平台上运行。我正在构建如下路径:

jarFilePath="jar:file:"+jarFile.getAbsolutePath()+"!"+jarPropertyFilePath; //jarPropertyFilePath is getting loaded from a class which is storing Constant JAR_PROPERTY_FILE_PATH.
fileURL= new URL(jarFilePath);

但是,上面只有当jarPropertyFilePath(jar中属性文件的固定位置)给出时才能起作用:

案例1:

public static final String JAR_PROPERTY_FILE_PATH = "/manifest/patchControl.properties";

案例2:

如果我按如下方式使用File.separator,它会给出java.net.MalformedURLException:no!/ in spec

public static final String JAR_PROPERTY_FILE_PATH = File.separator+"manifest"+File.separator+"patchControl.properties";     

在案例1中(工作正常),调试时的最终URL如下:

jar:file:C:\MyWorkspace\FalconPatchInstaller\.\patches\DS661JDK1.8.jar!/manifest/patchControl.properties

在案例2中(不工作),调试时的最终URL如下:

jar:file:C:\MyWorkspace\FalconPatchInstaller\.\patches\DS661JDK1.8.jar!\manifest\patchControl.properties

如何将File.separator用于JAR_PROPERTY_FILE_PATH?

1 个答案:

答案 0 :(得分:5)

  

我正在尝试读取位于jar文件中的属性文件。我想使用File.separator,因为应用程序将在多个平台上运行

不,您根本不想使用File.separator。 JAR文件中定义的路径分隔符为/。它不依赖于平台。

注意您可以在Java中的所有平台上的文件名中使用/。但这不是文件名,它是资源名称,它命名的东西不是文件,而是资源。