FileWriter 未使用 URL 中的协议写入文件
FileWriter not writing to file with protocol in URL
我正在使用下面的代码写入文件。
FileWriter writer = new FileWriter(outputPath);
writer.append(prettyJson);
writer.flush();
writer.close();
我注意到内容没有写入以"file://"开头的文件路径。这有什么具体原因吗?
简单。您必须遵守文档。文档明确规定:
https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File)
fileName - String The system-dependent filename.
System-dependent 表示:
/path/to/file
在 Linux / Mac
C:\path\to\file
在 Windows
file://
不是文件名,而是URL,在浏览器中最常用。
javadoc 说:
public FileWriter(String fileName)
throws IOException
Constructs a FileWriter object given a file name.
因此:当使用 this 接口时,您不能传递 URL 或 URI 或 合法 可以传递的任何内容从 file://
开始。
换句话说:这按设计工作。此构造函数需要一个简单明了的文件名。
如果您有 URL-like 字符串,请尝试这样的操作:
URL fileURL = new URL("file://C:/whatever.txt");
InputStream is = fileURL.openStream();
或者简单地从您获得的 UIR 创建一个 File 对象。然后将该文件对象传递给略有不同的 FileWriter 构造函数。
如果您尝试使用相对路径,请执行以下操作:
FileWriter fw = new FileWriter("./" + fileName, true);
当Java以String
的形式谈论文件名时,文档通常说
The system-dependent filename
因此它需要一个 "everyday" 文件名,例如 filename.ext
,或 Windows 上的 c:\some\path\filename.ext
或 [=27 上的 /some/path/filename.ext
=](这个实际上对两者都有效,Java 也接受 /
作为 Windows 上的路径分隔符)
对于使用 file://
协议的文件名,使用 URI
并将其包装成 File
:
FileWriter writer = new FileWriter(new File(new URI(outputPath)));
我正在使用下面的代码写入文件。
FileWriter writer = new FileWriter(outputPath);
writer.append(prettyJson);
writer.flush();
writer.close();
我注意到内容没有写入以"file://"开头的文件路径。这有什么具体原因吗?
简单。您必须遵守文档。文档明确规定: https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File)
fileName - String The system-dependent filename.
System-dependent 表示:
/path/to/file
在 Linux / MacC:\path\to\file
在 Windows
file://
不是文件名,而是URL,在浏览器中最常用。
javadoc 说:
public FileWriter(String fileName) throws IOException
Constructs a FileWriter object given a file name.
因此:当使用 this 接口时,您不能传递 URL 或 URI 或 合法 可以传递的任何内容从 file://
开始。
换句话说:这按设计工作。此构造函数需要一个简单明了的文件名。
如果您有 URL-like 字符串,请尝试这样的操作:
URL fileURL = new URL("file://C:/whatever.txt");
InputStream is = fileURL.openStream();
或者简单地从您获得的 UIR 创建一个 File 对象。然后将该文件对象传递给略有不同的 FileWriter 构造函数。
如果您尝试使用相对路径,请执行以下操作:
FileWriter fw = new FileWriter("./" + fileName, true);
当Java以String
的形式谈论文件名时,文档通常说
The system-dependent filename
因此它需要一个 "everyday" 文件名,例如 filename.ext
,或 Windows 上的 c:\some\path\filename.ext
或 [=27 上的 /some/path/filename.ext
=](这个实际上对两者都有效,Java 也接受 /
作为 Windows 上的路径分隔符)
对于使用 file://
协议的文件名,使用 URI
并将其包装成 File
:
FileWriter writer = new FileWriter(new File(new URI(outputPath)));