有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java创建目录和子目录(如果不存在)

假设我想创建generatedAnswers目录,其中包含另一个目录dirName,它是我输入的字符串变量

然后我想在目录`generatedAnswers/dirName'中插入fileName,这样文件就会按照以下结构落入dirName目录中:

/ generatedAnswers
   /dirName
     fileName.txt

我尝试了以下代码,但不起作用:

File file = new File("generatedQuestions/"+dirName+"/");
file.getParentFile().mkdirs();

PrintWriter writer = new PrintWriter(file+fileName+".txt");

我得到的结果是: /生成答案 肮脏的名字。txt(已转换为文件名)

我做错了什么


共 (3) 个答案

  1. # 1 楼答案

    我认为你可以使用以下代码:

    
    File file = new File("generatedQuestions/"+dirName+"/");
    file.getParentFile().mkdirs();
    
    PrintWriter writer = new PrintWriter(file.getAbsolutePath() +fileName+".txt");
    
    

    我添加文件。getAbsolutePath(),因为您尝试获取文件路径

  2. # 2 楼答案

    你做错的是这一行代码:

    file.getParentFile().mkdirs();
    

    file路径是generatedQuestions/dirName,所以file.getParentFile()返回generatedQuestions,然后调用mkdirs(),因此只创建目录generatedQuestions,而不是子目录dirName。移除getParentFile(),即

    file.mkdirs()
    

    请注意mkdirs()可能会失败,在这种情况下,它将返回false。您应该检查返回值,而不是假设它总是成功的

    最后,PrintWriter构造函数的参数也是错误的。类java.io.FiletoString()方法不打印尾随分隔符,因此需要添加它,即

    PrintWriter writer = new PrintWriter(file + File.separator + fileName+".txt");
    

    以下代码适用于我

    String dirName = "dirName";
    File file = new File("generatedQuestions" + File.separator + dirName);
    if (file.mkdirs()) {
        String fileName = "fileName";
        try (PrintWriter writer = new PrintWriter(file + File.separator + fileName+".txt")) {
        }
        catch (FileNotFoundException x) {
            x.printStackTrace();
        }
    }
    else {
        System.out.println("'mkdirs()' failed.");
    }
    

    或者,您可以像这样使用接口Path和类Files的组合

    Path path = Paths.get("generatedQuestions", dirName);
    try {
        Files.createDirectories(path);
        path = path.resolve(fileName + ".txt");
        PrintWriter writer = new PrintWriter(path.toFile());
    }
    catch (IOException x) {
        x.printStackTrace();
    }
    
  3. # 3 楼答案

    试着这样做:

    String dirName = "someDirectory";
    String fileName = "file.txt";
    File file = new File("generatedQuestions/" + dirName + "/" + fileName);
    if(file.getParentFile().mkdirs()) {
        PrintWriter printWriter = new PrintWriter(file);
    }