我正在使用下面的代码写入文件。
FileWriter writer = new FileWriter(outputPath);
writer.append(prettyJson);
writer.flush();
writer.close();
我注意到该内容未写入文件路径以“ file://”开头。有任何具体原因吗?
答案 0 :(得分:3)
简单。您必须遵守文档。并且文档明确规定: https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File)
fileName - String The system-dependent filename.
取决于系统的意思:
/path/to/file
C:\path\to\file
file://
不是文件名,而是URL,在浏览器中最常用。
答案 1 :(得分:2)
当Java以String
的形式谈论文件名时,文档通常会说
取决于系统的文件名
,因此期望使用“每天”的文件名,例如filename.ext
,在Windows上是c:\some\path\filename.ext
,在类似Unix的版本上是/some/path/filename.ext
(实际上,这两个文件都可以使用, Java在Windows上也接受/
作为路径分隔符)
对于使用file://
协议的文件名,请使用URI
并将其包装到File
中:
FileWriter writer = new FileWriter(new File(new URI(outputPath)));
答案 2 :(得分:1)
javadoc说:
public FileWriter(字符串fileName) 引发IOException
使用给定的文件名构造FileWriter对象。
因此:使用 this 接口时,您不能传递URL或URI或合法可以以file://
开头的任何内容。
换句话说:这按设计工作。该构造函数希望使用简单明了的文件名。
如果您有类似网址的字符串,请尝试以下操作:
URL fileURL = new URL("file://C:/whatever.txt");
InputStream is = fileURL.openStream();
或者只是从您获得的UIR创建一个File对象。然后将该文件对象传递给FileWriter的稍有不同的构造函数。
答案 3 :(得分:1)
如果您尝试使用相对路径,请执行以下操作:
FileWriter fw = new FileWriter("./" + fileName, true);