如果目录不存在,则创建该目录,然后在该目录中创建文件

2022-08-31 06:34:42

条件是,如果目录存在,则必须在该特定目录中创建文件,而无需创建新目录。

下面的代码仅使用新目录创建文件,而不为现有目录创建文件。例如,目录名称类似于“GETDIRECTION”:

String PATH = "/remote/dir/server/";
    
String fileName = PATH.append(id).concat(getTimeStamp()).append(".txt");  
             
String directoryName = PATH.append(this.getClassName());   
              
File file  = new File(String.valueOf(fileName));

File directory = new File(String.valueOf(directoryName));

if (!directory.exists()) {
        directory.mkdir();
        if (!file.exists() && !checkEnoughDiskSpace()) {
            file.getParentFile().mkdir();
            file.createNewFile();
        }
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(value);
bw.close();


答案 1

此代码首先检查目录是否存在,如果没有,则创建它,然后创建文件。请注意,我无法验证您的某些方法调用,因为我没有完整的代码,因此我假设对类似和之类的东西的调用将起作用。您还应该使用使用任何类时可以引发的可能性执行一些操作 - 编写文件的函数应引发此异常(并在其他地方处理),或者您应该直接在方法中执行此操作。另外,我假设这是类型 - 我不知道,因为你的代码没有明确定义它。如果它是像 a 这样的其他东西,你应该在 fileName 中使用它之前将其转换为 a,就像我在这里所做的那样。getTimeStamp()getClassName()IOExceptionjava.io.*idStringintString

另外,我用或我认为合适的方式替换了您的电话。appendconcat+

public void writeFile(String value){
    String PATH = "/remote/dir/server/";
    String directoryName = PATH.concat(this.getClassName());
    String fileName = id + getTimeStamp() + ".txt";

    File directory = new File(directoryName);
    if (! directory.exists()){
        directory.mkdir();
        // If you require it to make the entire directory path including parents,
        // use directory.mkdirs(); here instead.
    }

    File file = new File(directoryName + "/" + fileName);
    try{
        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(value);
        bw.close();
    }
    catch (IOException e){
        e.printStackTrace();
        System.exit(-1);
    }
}

如果你想在Microsoft Windows上运行代码,你可能不应该使用这样的裸路径名 - 我不确定它会如何处理文件名。为了获得完全的可移植性,您应该使用File.separator之类的东西来构造路径。/

编辑:根据 JosefScript 下面的评论,没有必要测试目录是否存在。如果调用创建了目录,则调用将返回,如果未创建目录,则调用将返回,包括目录已存在的情况。directory.mkdir()truefalse


答案 2

Java 8+ 版本:

Files.createDirectories(Paths.get("/Your/Path/Here"));

将创建一个新目录和不存在的父目录。如果目录已存在,则此方法不会引发异常。Files.createDirectories()


推荐