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

Java 写入新文件时自动创建整个路径,java,path,directory,filewriter,Java,Path,Directory,Filewriter,我想用写一个新文件。我是这样使用它的: FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt"); 现在dir1和dir2目前不存在。我希望Java自动创建它们,如果它们还不存在的话。实际上,如果还不存在,Java应该设置整个文件路径 如何实现此目的?使用。使用。使用文件.mkdirs(): 使用File.mkdirs(): 比如: File file = new File("C:\\user\\

我想用写一个新文件。我是这样使用它的:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");
现在
dir1
dir2
目前不存在。我希望Java自动创建它们,如果它们还不存在的话。实际上,如果还不存在,Java应该设置整个文件路径

如何实现此目的?

使用。

使用。

使用
文件.mkdirs()

使用
File.mkdirs()

比如:

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

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
用来处理所有这些头痛

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

openOutputStream(File file [, boolean append]) 
用来处理所有这些头痛

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

openOutputStream(File file [, boolean append]) 

由于Java 1.7,您可以使用Files.createFile:

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

由于Java 1.7,您可以使用Files.createFile:

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


拜托,你能说得更具体一点吗?嗨,简,编辑。FileUtils下还有很多其他有用的方法。ApacheCommons IO类,如OIUtils和FileUtils,使java开发人员的生活更加轻松。我同意FileUtils是一种很好的方法,但我认为更简单的方法是使用writeStringToFile,而不是openOutputStream。例如,File File=新文件(“C:/user/Desktop/dir1/dir2/filename.txt”);writeStringToFile(文件“foo-bar-baz”,true);谢谢你。现在我的代码更干净了。最近javadoc的链接:请,你能更具体一点吗?嗨,Jean,编辑。FileUtils下还有很多其他有用的方法。ApacheCommons IO类,如OIUtils和FileUtils,使java开发人员的生活更加轻松。我同意FileUtils是一种很好的方法,但我认为更简单的方法是使用writeStringToFile,而不是openOutputStream。例如,File File=新文件(“C:/user/Desktop/dir1/dir2/filename.txt”);writeStringToFile(文件“foo-bar-baz”,true);谢谢你。现在我的代码更干净了。链接到最近的javadoc:这将创建一个目录`C:\\user\Desktop\dir1\dir2\filename.txt`.@MartinSchröder:仅当您保留文件名组件时。这将创建一个目录`C:\\user\Desktop\dir1\dir2\filename.txt`.@MartinSchröder:仅当您保留文件名组件时。为什么要获取父文件而不仅仅是mkdirs?它会覆盖上一个文件夹,如果我正在用不同的同级文件重新发布相同的代码?@surajs1n:如果目录已经存在,
mkdirs
将不起任何作用。@sauperl:如果文件还不存在,mkdirs()将假定指定的所有内容都是一个目录,并将其作为目录创建(刚刚测试过)。通过使用getParentFile(),您可以将文件本身的创建留给FileWriter。为什么要创建getParentFile而不仅仅是mkdirs?如果我用不同的同级文件重新发布相同的代码,它会覆盖上一个文件夹吗?@surajs1n:如果目录已经存在,
mkdirs
将不起任何作用。@sauper:如果文件还不存在,mkdirs()将假定指定的所有内容都是一个目录,并将其创建为一个目录(刚刚对其进行了测试)。通过使用getParentFile(),您可以将文件本身的创建留给FileWriter。请务必记住,相对路径可能会导致空指针异常。
Path pathToFile=Path.get(“myFile.txt”);Files.createDirectories(pathToFile.getParent());
if(!Files.exists(pathToFile.getParent()))Files.createDirectory(pathToFile.getParent());//测试目录是否已存在以避免错误重要的是要记住相对路径可能导致空指针异常。
Path pathToFile=paths.get(“myFile.txt”);Files.createDirectories(pathToFile.getParent());
if(!Files.exists(pathToFile.getParent()))Files.createDirectory(pathToFile.getParent());//测试目录是否已存在以避免错误