英文:
How write path to file properties?
问题
I wrote a program with two languages. I created a file 'resources_in.properties'. When I attempted to get properties from the file, I got the error:
> Exception in thread "main" java.lang.NullPointerException at
> java.util.Properties$LineReader.readLine(Properties.java:434) at
> java.util.Properties.load0(Properties.java:353) at
> java.util.Properties.load(Properties.java:341) at
> com.rd.java.basic.practice.Helper.getProper(Part5.java:18) at
> com.rd.java.basic.practice.Helper.main(Part5.java:27)
I think it is because I have an incorrect path to properties.
'resources_in.properties' is located at 'MyApp\src\main\resources_in.properties'.
The main class is located at 'MyApp\src\main\java\com\rd\java\basic\practice\Helper.java'
My code:
public class Helper {
private static String getProper(String lang, String value) {
Properties prop = new Properties();
InputStream inputStream = Helper.class.getClassLoader().getResourceAsStream("./src/main/resources_in.properties");
try {
prop.load(inputStream);
}catch (IOException e){
System.out.println(e);
}
String word = prop.getProperty(value);
return word;
}
public static void main(String[] args){
System.out.println(getProper("en","car"));
}
}
英文:
I wrote a program with two language. I created a file resources_in.properties
. When I attempted to get properties from the file, I got the error:
> Exception in thread "main" java.lang.NullPointerException at
> java.util.Properties$LineReader.readLine(Properties.java:434) at
> java.util.Properties.load0(Properties.java:353) at
> java.util.Properties.load(Properties.java:341) at
> com.rd.java.basic.practice.Helper.getProper(Part5.java:18) at
> com.rd.java.basic.practice.Helper.main(Part5.java:27)
I think it is because I have an incorrect path to properties.
resources_in.properties
is located at MyApp\src\main\resources_in.properties
.
The main class locate MyApp\src\main\java\com\rd\java\basic\practice\Helper.java
My code:
public class Helper {
private static String getProper(String lang, String value) {
Properties prop = new Properties();
InputStream inputStream = Helper.class.getClassLoader().getResourceAsStream("./src/main/resources_en.properties");
try {
prop.load(inputStream);
}catch (IOException e){
System.out.println(e);
}
String word = prop.getProperty(value);
return word;
}
public static void main(String[] args){
System.out.println(getProper("en","car"));
}
}
答案1
得分: 0
你正在尝试加载./src/main/resources_en.properties
路径作为资源。这不会起作用,资源是作为类路径路径而不是文件系统文件引用的。通常会是:
Properties prop = new Properties();
try (InputStream in = Helper.class.getResourceAsStream("/resources_en.properties")) {
prop.load(in);
}
然而,在大多数构建系统中,资源通常放置在/src/main/resource
目录下,而在你的情况下,路径是非标准的,这可能会导致JAR文件打包时出现问题。
另外,看起来你正在处理具有文件名中的区域设置后缀的本地化资源。也许你应该使用 java.util.ResourceBundle
而不是 java.util.Properties
。
英文:
You are trying to load ./src/main/resources_en.properties
path as a resource. This won't work, resources are referenced not as file system files but as classpath paths. Usually it would be:
Properties prop = new Properties();
try (InputStream in =
Helper.class.getResourceAsStream("/resources_en.properties")) {
prop.load(in);
}
however in most build systems resources are placed under /src/main/resource
while in your case the path is non-standard which can imply problems with packaging the JAR.
It also looks like you are dealing with localized resources due to locale suffix in the file name. Perhaps instead of java.util.Properties
you should use java.util.ResourceBundle
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论