Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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 如何从打包为同一jar的类文件中读取属性文件_Java - Fatal编程技术网

Java 如何从打包为同一jar的类文件中读取属性文件

Java 如何从打包为同一jar的类文件中读取属性文件,java,Java,我想从一个java类文件中读取一个属性文件,这两个文件被打包为一个相同的jar 项目结构: src --->com ------->xyz ----------->Property(foldername) -------------------------------------->abc.properties ----------->JavaClassFileFolder ----------------------------------

我想从一个java类文件中读取一个属性文件,这两个文件被打包为一个相同的jar

项目结构:

src  
--->com  
------->xyz  
----------->Property(foldername)  
-------------------------------------->abc.properties  
----------->JavaClassFileFolder  
-------------------------------------->a.java
InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/xyz/Property/abc.properties");  
Properties prop =  new Properties();  
prop.load(in);
ClassLoader cl = Constants.class.getClassLoader();
Properties prop =  new Properties();   
prop .load(cl.getResourceAsStream("com/xyz/Property/abc.properties"));
在上面的结构文件夹中,我想从
a.java
文件中读取
abc.properties
文件。我在
a.java
文件中尝试了以下方法来读取

方法1:

src  
--->com  
------->xyz  
----------->Property(foldername)  
-------------------------------------->abc.properties  
----------->JavaClassFileFolder  
-------------------------------------->a.java
InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/xyz/Property/abc.properties");  
Properties prop =  new Properties();  
prop.load(in);
ClassLoader cl = Constants.class.getClassLoader();
Properties prop =  new Properties();   
prop .load(cl.getResourceAsStream("com/xyz/Property/abc.properties"));
结果:将NPE抛出道具负载(英寸)

方法2:

src  
--->com  
------->xyz  
----------->Property(foldername)  
-------------------------------------->abc.properties  
----------->JavaClassFileFolder  
-------------------------------------->a.java
InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/xyz/Property/abc.properties");  
Properties prop =  new Properties();  
prop.load(in);
ClassLoader cl = Constants.class.getClassLoader();
Properties prop =  new Properties();   
prop .load(cl.getResourceAsStream("com/xyz/Property/abc.properties"));

Result:将NPE抛出prop.load(in)

您的方法一必须工作,只要
引用a类,并且属性文件存在于您提到的目的地,它应该工作。它不会这样做的唯一原因是com/xyz/Property/abc.properties不在jar中

您使用的是一个相对路径(开始时没有),因此getResourceAsStream从对象的包开始(this)。在开头添加/,您正在搜索绝对类路径,因为您在同一个类加载器中(您的类和属性文件在同一个jar中),所以这里也没有问题。

/
开始路径,请参阅

也就是说:

  • 如果使用Maven,请将属性文件放到
    src/main/resources/com/xyz/property
    。Maven将为您进行必要的复制
  • 始终以小写字母开头Java包名称,即使用
    property
    而不是
    property
    。通常,您只希望Java类以大写字母开头
  • 通常,不需要使用类加载器,而是使用
    Constants.class.getResourceAsStream(“/com/xyz/property/abc.properties”)

如果您使用的是Eclipse,则需要将资源放在包根目录中……您需要找到Eclipse引用以获得完整的详细信息。如果您有Jar文件,请尝试解压缩它,并检查
abc.properties
是否存在于您期望的位置