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

时间:2019-05-27 13:51:50

标签: java filewriter

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

FileWriter writer = new FileWriter(outputPath);
writer.append(prettyJson);
writer.flush();
writer.close();

我注意到该内容未写入文件路径以“ file://”开头。有任何具体原因吗?

4 个答案:

答案 0 :(得分:3)

简单。您必须遵守文档。并且文档明确规定: https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File)

fileName - String The system-dependent filename.

取决于系统的意思:

    在Linux / Mac上的
  • /path/to/file
  • Windows上的
  • 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);