我正在尝试读取和写入文件,但我想通过资源访问该文件。
这就是我的工作
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()));
但似乎都不正确。这样做的正确方法是什么?
答案 0 :(得分:23)
尝试以下:
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());
答案 1 :(得分:2)
上述所有解决方案都显示了如何在构建文件夹中获得对资源的访问权限。这意味着已将资源移动到使用 .class 文件构建目录 如果您需要在终止程序后将一些文件写入资源以保存它们,那么您将不得不描述从根项目开始的路径:
./的src /主/资源/ foo.ext
这种解决方案通常不推荐,但在其他情况下可能是必要的。
答案 2 :(得分: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...
}
请注意,该路径是相对于资源文件夹的。