24

我正在尝试读取和写入文件,但我想通过 Resource 访问该文件。

这就是我所做的

File f = new File(ClassLoader.getSystemResource("/blah/blah/Properties.prop").toURI());
BufferedReader br = new BufferedReader(new FileReader(f));
String line = br.readLine();

PrintWriter p = new PrintWriter(new File(ClassLoader.getSystemResource("/blah/blah/Properties.prop").toURI()));

但似乎都不正确。这样做的正确方法是什么?

4

3 回答 3

27

对于输入,请尝试以下操作:

     InputStreamReader isReader = 
                      new InputStreamReader(
                          this.getClass().getResourceAsStream(templateName));
      BufferedReader br = new BufferedReader(isReader);     

或者

     InputStreamReader isReader = 
                      new InputStreamReader(
                          <youclassName>.class.getResourceAsStream(templateName));
      BufferedReader br = new BufferedReader(isReader);   

对于输出,请尝试以下操作:

      PrintWriter writer = 
               new PrintWriter(
                     new File(this.getClass().getResource(templateName).getPath()));
于 2012-10-21T18:47:54.677 回答
3

上面的所有解决方案都显示了您如何获得对build 文件夹中资源的访问权限。这意味着资源已被移动到带有.class文件的构建目录。
如果您需要在程序终止后将一些文件写入资源以保存它们,那么您必须描述以根项目开头的路径:

./src/main/resources/foo.ext

通常不推荐这种解决方法,但在其他情况下可能是必要的。

于 2016-10-07T05:33:59.267 回答
1

更简单地说,

 try (BufferedReader bufferedReader = Files.newBufferedReader(Paths.get(Resources.getResource("path").toURI()))) {
        //bufferedReader...
    }
    try (BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get(Resources.getResource("path").toURI()))) {
        //bufferedWriter...
    }

请注意,路径是相对于资源文件夹的。

于 2014-11-26T14:38:59.520 回答