2012-10-21 107 views
12

我试图读取和写入文件,但我想通过资源访问该文件写入到Java文件。阅读并通过资源

这是我做的

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())); 

但既不似乎是正确的。什么是正确的方法来做到这一点?

回答

19

如下尝试:

 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()); 
+0

谢谢!如何使用PrintWriter输出 – CodeGuy

+0

应该以相同的方式工作,但不要同时读写相同的文件。 –

+0

你能告诉我代码吗?我似乎无法得到PrintWriter的工作 – CodeGuy

0

更简单地说,

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

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

+0

当资源嵌入到jar文件中时,此解决方案似乎不起作用。在我的情况下,资源的URI评估为''jar:file:/ C:/PCProxAPI/PCProxAPI.jar!/com/agilysys/rguest/buy/peripherals/PCProxPlusConfig.cfg“'和'Paths.get(...) ''抛出java.nio.file.FileSystemNotFoundException' – HairOfTheDog

+1

对于谁比谁想知道的是'Resources'类实际上是'com.google.common.io.Resources' – HairOfTheDog

+0

@HairOfTheDog,“路径”工具只“知道”的文件系统。一旦文件被打包在jar中,它就不再是文件系统范例。 – chaiyachaiya

1

上面显示的所有解决方案,您可以如何接收到你的资源在build文件夹访问。这意味着资源已被移至与.class文件构建目录。
如果你需要写一些文件到资源节约他们终止后的程序,那么你将有描述开始项目根路径:

./src/main/resources/foo.ext

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

+0

我一直在问自己是否有指向目标文件夹以便在原始资源路径中开关的方法。 –