FileWriter 不使用 URL 中的协议写入文件

我正在使用下面的代码写入文件。


FileWriter writer = new FileWriter(outputPath);

writer.append(prettyJson);

writer.flush();

writer.close();

我注意到内容没有写入以“file://”开头的文件路径。这有什么具体原因吗?


慕桂英4014372
浏览 155回答 4
4回答

杨__羊羊

当 Java 以 的形式谈论文件名时String,文档通常说系统相关的文件名因此它期待一个“日常”文件名,比如filename.ext,或者类似c:\some\path\filename.extWindows 或/some/path/filename.ext类 Unix 的文件名(这个实际上适用于两者,Java 也接受/Windows 上的路径分隔符)对于带有file://协议的文件名,使用URI并将其包装成File:FileWriter writer = new FileWriter(new File(new URI(outputPath)));

暮色呼如

简单的。您必须遵守文档。并且文档明确指定: 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在 Linux / Mac 上C:\path\to\file在 Windows 上file://不是文件名,而是 URL,最常用于浏览器。

哔哔one

如果您尝试使用相对路径,请执行以下操作:FileWriter fw = new FileWriter("./" + fileName, true);

慕妹3146593

javadoc说:public FileWriter(String fileName) 抛出 IOException构造一个给定文件名的 FileWriter 对象。因此:使用此接口时,您不能传递 URL、URI 或任何合法可以以file://.换句话说:这按设计工作。此构造函数需要一个简单明了的文件名。如果您有类似 URL 的字符串,请尝试以下操作:URL fileURL = new URL("file://C:/whatever.txt");InputStream is = fileURL.openStream();或者简单地从您获得的 UIR 创建一个 File 对象。然后将该文件对象传递给略有不同的 FileWriter 构造函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java