这是我的项目架构:
我想在文件“file.txt”上写一下,我尝试使用 BufferedWriter 和 PrintWriter 但它不会没有错误。
我的BufferedWriter代码:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("FileTLV.txt").getFile());
try{
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("I want to write a String");
writer.close();
}catch (IOException e) {
e.printStackTrace();
}
我的PrintWriter代码:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("FileTLV.txt").getFile());
try{
PrintWriter writer = new PrintWriter(new FileWriter(file));
writer.print("I want to print a String");
writer.flush();
writer.close();
}catch (IOException e) {
e.printStackTrace();
}
代码执行没有任何错误。
答案 0 :(得分:2)
应用程序资源是只读的。你不能写信给他们。
如果要覆盖应用程序资源,请将内容写入新位置(例如temporary file或用户主目录下某处的位置),然后编写一些代码以在下降之前检查该文件返回内置的应用程序资源。
此外,URL 的getFile()方法不会将URL转换为有效的文件名。它返回URL的路径和查询部分,所有percent-escape都保持不变,因此如果从目录或.jar运行,其完整路径包含URL中不允许的任何字符,则结果将无法使用。应避免使用该方法。 (方法名称来自java.net.URL是Java 1.0中存在的类,当Java 1.0发布时,大多数URL实际上都是指物理文件。)
答案 1 :(得分:0)
只需使用Files。从java.nio(Java 7 +)
写这是一个例子:
List<String> lines = Arrays.asList("line1", "line2");
Path file = Paths.get("filename.txt");
Files.write(file, lines, Charset.forName("UTF-8"));
那真是太棒了:
&#34;该方法确保在所有字节都已关闭时关闭文件 写入(或抛出I / O错误或其他运行时异常)。&#34;
Files.write(filePathObj, content, StandardOpenOption.APPEND);
允许您附加到文件(查看不同的OpenOptions)
通常,Files.nio非常有用,也适用于阅读