Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 属性文件没有为相对路径加载和更新,但为绝对路径工作正常_Java - Fatal编程技术网

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中的内容,因为这意味着外部资源也可以修改您的类文件,现在您可能需要这样做我不想发生这种事!。