Java 属性文件没有为相对路径加载和更新,但为绝对路径工作正常
我试图从Java 属性文件没有为相对路径加载和更新,但为绝对路径工作正常,java,Java,我试图从src/main/resources文件夹访问属性文件,但当我尝试使用相对路径加载文件时,该文件不会得到更新。但对于绝对路径来说,它工作得很好 我需要动态web项目跨所有平台工作 public static void loadUsers() { try( FileInputStream in = new FileInputStream("C:\\Users\\SohamGuha\\Documents\\work-coding\\work-coding\\src\\main\
src/main/resources
文件夹访问属性文件,但当我尝试使用相对路径加载文件时,该文件不会得到更新。但对于绝对路径来说,它工作得很好
我需要动态web项目跨所有平台工作
public static void loadUsers() {
try(
FileInputStream in = new FileInputStream("C:\\Users\\SohamGuha\\Documents\\work-coding\\work-coding\\src\\main\\resources\\users.properties")) {
// write code to load all the users from the property file
// FileInputStream in = new FileInputStream("classpath:users.properties");
users.load(in);
System.out.println(users);
in.close();
}
catch(Exception e){
e.printStackTrace();
}
首先,您使用的是Spring,至少底部的标签是这么说的。其次
C:\\Users\\SohamGuha\\Documents\\work coding\\work coding\\src\\main\\resources\\Users.properties
是类路径的根。不要加载文件
,而是使用
由于这是类路径的一部分,您只需使用获取适当的InputStream
。无论您处于哪个环境,这都会起作用
try( InputStream in = new ClassPathResource("users.properties").getInputStream()) {
//write code to load all the users from the property file
//FileInputStream in = new FileInputStream("classpath:users.properties");
users.load(in);
System.out.println(users);
} catch(Exception e){
e.printStackTrace();
}
注意:您已经在使用资源试用,因此无需关闭已为您处理的InputStream
更改应用程序内部的内容根本不起作用,因为这意味着您可以更改jar中的资源(读取类),这将是一个相当大的安全风险!如果您希望某些内容是可更改的,那么必须将其设置为类路径之外的文件,并直接位于文件系统上 首先,您使用的是Spring,至少底部的标签是这么说的。其次
C:\\Users\\SohamGuha\\Documents\\work coding\\work coding\\src\\main\\resources\\Users.properties
是类路径的根。不要加载文件
,而是使用
由于这是类路径的一部分,您只需使用获取适当的InputStream
。无论您处于哪个环境,这都会起作用
try( InputStream in = new ClassPathResource("users.properties").getInputStream()) {
//write code to load all the users from the property file
//FileInputStream in = new FileInputStream("classpath:users.properties");
users.load(in);
System.out.println(users);
} catch(Exception e){
e.printStackTrace();
}
注意:您已经在使用资源试用,因此无需关闭已为您处理的InputStream
更改应用程序内部的内容根本不起作用,因为这意味着您可以更改jar中的资源(读取类),这将是一个相当大的安全风险!如果您希望某些内容是可更改的,那么必须将其设置为类路径之外的文件,并直接位于文件系统上 试试下面的代码 导入java.io.FileInputStream; 导入java.io.IOException 公共类LoadUsers{ 公共静态void main(字符串[]args)引发IOException{
try(FileInputStream fis=new FileInputStream("src/main/resources/users.properties")){
Properties users=new Properties();
users.load(fis);
System.out.println(users);
}catch(IOException ioe) {
ioe.printStackTrace();
}
}
}请尝试以下代码 导入java.io.FileInputStream; 导入java.io.IOException 公共类LoadUsers{ 公共静态void main(字符串[]args)引发IOException{
try(FileInputStream fis=new FileInputStream("src/main/resources/users.properties")){
Properties users=new Properties();
users.load(fis);
System.out.println(users);
}catch(IOException ioe) {
ioe.printStackTrace();
}
}
}你能粘贴你的类路径吗?FileInputStream获取文件的位置,因此你的路径类似于新FileInputStream(“src\main\resources\users.properties”)我尝试过使用classpath.Properties文件,但没有更新。这是一个动态web项目,我尝试加载属性文件,并以表单输入值对其进行一些更改。您尝试过使用classloader.getResource()吗?你能粘贴你的类路径吗?FileInputStream获取文件的位置,因此你的路径类似于新FileInputStream(“src\main\resources\users.properties”)我尝试过使用classpath.Properties文件,但没有更新。这是一个动态web项目,我尝试加载属性文件,并以表单输入值对其进行一些更改。您尝试过使用classloader.getResource()吗?OutputStream呢?如我在回答中所述,您不能更改类路径资源中的内容。这只能在常规文件资源中实现,并且必须指向类路径之外的资源。然后,如果资源是,您还可以获得
OutputStream
。因此,我们无法更新cl中的属性文件asspath?您不能写入jar/war中的内容,因为这意味着外部资源也可以修改您的类文件,现在这可能是您不希望发生的事情了!OutputStream呢?正如我在回答中所述,您不能更改类路径资源中的内容。这只有在使用常规文件资源和必须指向类路径之外的资源。如果资源是,那么您还可以获得OutputStream
。因此,我们无法更新类路径中的属性文件?您不能写入jar/war中的内容,因为这意味着外部资源也可以修改您的类文件,现在您可能需要这样做我不想发生这种事!。