ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

我怎样才能做到这一点?


J
Jon Skeet

就像是:

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

为什么 getParentFile 而不仅仅是 mkdirs?
如果我用不同的兄弟文件重新发布相同的代码,它会覆盖以前的文件夹吗?
@surajs1n:如果目录已经存在,mkdirs 将不执行任何操作。
@sauperl:如果该文件尚不存在, mkdirs() 将假定指定的所有内容都是一个目录并按原样创建它(只是对其进行了测试)。通过使用 getParentFile(),您可以将文件本身的创建留给 FileWriter。
c
cdmihai

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

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

重要的是要记住,相对路径可能会导致空指针异常。 Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
if(!Files.exists(pathToFile.getParent())) Files.createDirectory(pathToFile.getParent()); //测试目录是否已经存在以避免错误
createDirectories 的@AndreNel JavaDoc 状态:与 createDirectory 方法不同,如果由于目录已经存在而无法创建目录,则不会引发异常。
A
Armand

使用 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);

M
Marcelo Cantos

使用 File.mkdirs()


这将创建一个目录 `C:\\user\Desktop\dir1\dir2\filename.txt`。
@MartinSchröder:仅当您保留文件名组件时。
B
Belle

使用 FileUtils 来处理所有这些令人头疼的问题。

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

openOutputStream(File file [, boolean append]) 

拜托,你能更具体一点吗?
嗨,让,编辑。 FileUtils 下还有很多其他有用的方法。 OIUtils 和 FileUtils 等 Apache Commons IO 类使 Java 开发人员的生活更轻松。
我同意 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/…