写入新文件时自动创建整个路径


246

我想用编写一个新文件FileWriter。我这样使用它:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

现在dir1dir2当前不存在。我希望Java自动创建它们(如果尚未存在的话)。实际上,Java应该设置整个文件路径(如果尚不存在)。

我该如何实现?

Answers:


431

就像是:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

11
为什么要使用getParentFile而不仅仅是mkdirs?
sauperl

如果我使用不同的同级文件重新发布相同的代码,它将覆盖先前的文件夹吗?
surajs1n

1
@ surajs1n:如果目录已经存在,mkdirs则什么都不做。
乔恩·斯基特

3
@sauperl:如果该文件尚不存在,则mkdirs()将假定指定的所有内容均为目录,并以此进行创建(仅对其进行了测试)。通过使用getParentFile(),您可以将文件本身的创建留给FileWriter
h4nek

149

从Java 1.7开始,您可以使用Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);

4
重要的是要记住,相对路径可能会导致空指针异常。Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
麦格

if(!Files.exists(pathToFile.getParent()))Files.createDirectory(pathToFile.getParent()); //测试目录是否已经存在以避免错误
Andre Nel

29

用途File.mkdirs()

File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newJsp = new FileWriter(file);


4

使用FileUtils处理所有这些令人头疼的事情。

编辑:例如,使用下面的代码写入文件,此方法将“检查并创建父目录(如果不存在)”。

openOutputStream(File file [, boolean append]) 

1
拜托,您能更具体一点吗?
吉恩(Jean)

嗨,吉恩,已编辑。FileUtils下还有许多其他有用的方法。诸如OIUtils和FileUtils之类的Apache Commons IO类使Java开发人员的生活更加轻松。
kakacii

1
我同意FileUtils是一个不错的选择,但是我认为更简单的方法是使用writeStringToFile而不是openOutputStream。例如File file = new File(“ C:/user/Desktop/dir1/dir2/filename.txt”); FileUtils.writeStringToFile(file,“ foo bar baz”,true);
保罗

感谢那 。现在使我的代码更加清晰。链接到最近的javadoc:commons.apache.org/proper/commons-io/javadocs/api-2.5/org/...
尼基尔萨胡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.