当前位置: 首页 > 知识库问答 >
问题:

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

王翰墨
2023-03-14

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

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

java prettyprint-override">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();

共有3个答案

司空俊雄
2023-03-14

尝试使其尽可能简短和简单。如果目录不存在,则创建目录,然后返回所需的文件:

/** Creates parent directories if necessary. Then returns file */
private static File fileWithDirectoryAssurance(String directory, String filename) {
    File dir = new File(directory);
    if (!dir.exists()) dir.mkdirs();
    return new File(directory + "/" + filename);
}
林泰平
2023-03-14

Java8版本:

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

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

公冶兴文
2023-03-14

此代码首先检查目录是否存在,如果没有,则创建它,然后创建文件。请注意,我无法验证您的一些方法调用,因为我没有您的完整代码,所以我假设对getTimeStamp()getClassName()之类的调用将起作用。您还应该使用可能的IOException来做一些事情,当使用任何java.io.*类时,可以抛出这些异常——要么您的编写文件的函数应该抛出这个异常(并且它在其他地方处理),要么您应该直接在方法中这样做。此外,我假设idString类型的-我不知道,因为您的代码没有明确定义它。如果它是其他类似int的东西,您可能应该将其转换为String,然后再在fileName中使用它,就像我在这里所做的那样。

此外,我还将您的append调用替换为concat或我认为合适的。

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的评论,没有必要测试目录是否存在。目录。mkdir()如果创建了目录,调用将返回true;如果没有创建目录,调用将返回false,包括目录已经存在的情况。

 类似资料:
  • 问题内容: 条件是目录是否存在,它必须在该特定目录中创建文件而无需创建新目录。 下面的代码仅创建具有新目录的文件,而不为现有目录创建文件。例如,目录名称将类似于“ GETDIRECTION” 问题答案: 此代码首先检查目录是否存在,如果不存在则创建该目录,然后创建该文件。请注意,由于我没有完整的代码,因此我无法验证您的某些方法调用,因此,我假设对和这样的事情都可以使用。使用任何类时,您还应该做一些

  • 如果目录不存在,下面的方法是正确的创建方法吗? 它应该拥有脚本的完全权限,并且可以被其他人读取。

  • 问题内容: 如果目录不存在,这是创建目录的正确方法吗?它应该对该脚本具有完全的权限,并且可以被其他人读取。 问题答案:

  • 我目前正在为文件管理服务器开发RecycleBin组件。删除文档时,将从多个位置删除所有版本。出现这种情况时,所有文件夹路径将被删除到重复字符串dp\u original\u folder\u paths。 我想在文件夹路径不存在时创建它。 这是我当前的代码。第一部分检查文件是否存在,如果没有创建它。第二部分显示文档被重新链接到文件夹。 给出的输出为 创建目录:\EAM\sbotest 已创建目录

  • 创建目录 创建目录 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * *//* * 程序清单:创建目录 * * 程序会创建一个操作文件的函数并导出到msh命令列表 * 在函数

  • 问题内容: 我想要创建目标目录(如果不存在)的命令(或cp的选项)。 例: 问题答案: ()没有此类选项。