通过资源读取和写入Java文件

通过资源读取和写入Java文件,java,io,Java,Io,我正在尝试读取和写入文件,但我希望通过资源访问该文件 我就是这么做的 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 Fi

我正在尝试读取和写入文件,但我希望通过资源访问该文件

我就是这么做的

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()));
但两者似乎都不正确。正确的方法是什么?

请尝试以下方法:

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

简单地说

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

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

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

./src/main/resources/foo.ext


通常不建议使用此解决方案,但在其他情况下可能需要使用此解决方案。

应以相同的方式工作,但不要同时读取和写入同一文件。您能给我看一下代码吗。我好像无法让打印机工作抱歉我错过了
getResourceAsStream
始终是输入流。已更新PrintWriter的答案,请重试。顺便问一下,读卡器工作了吗?应该提到的是,可能没有可以写入的文件。如果资源是
.jar
文件的一部分,则写入将失败。(即使您可以修改jar文件,也可以对其进行签名,或者干脆不在运行jvm的机器上……)当资源嵌入到jar文件中时,此解决方案似乎不起作用。在我的例子中,资源的URI的计算结果是:jar:file:/C:/PCProxAPI/PCProxAPI.jar!/com/agilysys/rguest/buy/peripherals/PCProxPlusConfig.cfg“和
path.get(…)
抛出
java.nio.file.FileSystemNotFoundException
,任何人如果想知道
Resources
类实际上是
com.google.common.io.Resources
@hairofdog,“path”实用程序只“知道”文件系统。一旦一个文件被打包到jar中,它就不再是一个文件系统范例了。@hairofdog:我们可以把它看作是smthg,比如:Files.streamToString(Resources.getResource(“foo/bar.txt”).openStream();即使文件已打包(Paths.get方法引发了异常),它也会工作。我尝试了此操作,但它没有在Resources文件夹中创建outputstream,而是在target文件夹中创建。我问自己,在指向target文件夹后,是否有办法在原始Resource路径中切换。
      PrintWriter writer = 
               new PrintWriter(
                     new File(this.getClass().getResource(templateName).getPath());
 try (BufferedReader bufferedReader = Files.newBufferedReader(Paths.get(Resources.getResource("path").toURI()))) {
        //bufferedReader...
    }
    try (BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get(Resources.getResource("path").toURI()))) {
        //bufferedWriter...
    }