问题

如果我想在C:/a/b/test.txt中创建一个文件,我可以这样做:

File f = new File("C:/a/b/test.txt");

另外,我想使用FileOutputStream来创建文件。那我该怎么办呢?由于某种原因,文件不会在正确的目录中创建。


#1 热门回答(199 赞)

最好的方法是:

String path = "C:" + File.separator + "hello" + File.separator + "hi.txt";
// Use relative path for Unix systems
File f = new File(path);

f.getParentFile().mkdirs(); 
f.createNewFile();

#2 热门回答(47 赞)

你需要在写入之前确保父目录存在。你可以通过File#mkdirs()这样做。

File f = new File("C:/a/b/test.txt");
f.getParentFile().mkdirs();
// ...

#3 热门回答(29 赞)

使用Java 7,你可以使用Path,PathsFiles

import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateFile {

    public static void main(String[] args) throws IOException {
        Path path = Paths.get("/tmp/foo/bar.txt");

        Files.createDirectories(path.getParent());

        try {
            Files.createFile(path);
        } catch (FileAlreadyExistsException e) {
            System.err.println("already exists: " + e.getMessage());
        }
    }
}

原文链接