Java 写入包含子文件夹的新文件时自动创建整个路径

Java 写入包含子文件夹的新文件时自动创建整个路径,java,path,Java,Path,我想在当前不存在的文件夹中写入一个新文件 我是这样使用它的: File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt"); file.getParentFile().mkdirs(); FileWriter writer = new FileWriter(file); 我在名为dir1.dir2的文件夹下获取文件filename.txt 我需要dir1/dir2: 我怎样才能做到这一点 请不要将这个问题标记为重复问题

我想在当前不存在的文件夹中写入一个新文件

我是这样使用它的:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
我在名为
dir1.dir2
的文件夹下获取文件
filename.txt

我需要
dir1/dir2

我怎样才能做到这一点

请不要将这个问题标记为重复问题,因为我在研究后没有得到我需要的东西

更新1

我使用Jasper Report和Spring Boot导出pdf文件

我需要在目录名
当前年份
下创建文件。在这个文件夹下,我需要创建一个名为当前月份的目录,并且在这个目录下应该导出pdf文件。例如:

(2018/auguest/report.pdf)

我正在使用
LocalDateTime
获取
year
month

以下是我代码的一部分:

    ReportFiller reportFiller = context.getBean(ReportFiller.class);
    reportFiller.setReportFileName("quai.jrxml");
    reportFiller.compileReport();

    reportFiller = context.getBean(ReportFiller.class);
    reportFiller.fillReport();

    ReportExporter simpleExporter = context.getBean(ReportExporter.class);
    simpleExporter.setJasperPrint(reportFiller.getJasperPrint());

    LocalDateTime localDateTime = LocalDateTime.now();
    String dirName = simpleExporter.getPathToSaveFile() + "/"+ 
    localDateTime.getYear() + "/" + localDateTime.getMonth().name();
    File dir = new File(dirName);
    dir.mkdirs();
    String fileName = dirName + "/quaiReport.pdf";
    simpleExporter.exportToPdf(fileName, "");
以下是我得到的:


尝试下面的代码,它将按照您的期望工作

File dir = new File("C:\\Users\\username\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newFile = new FileWriter(file);

您需要先创建文件夹结构,然后创建文件。首先,创建目录,然后创建一个新文件进行写入

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

class TestDir {
    public static void main(String[] args) {
        String dirPath = "C:\\user\\Desktop\\dir1\\dir2\\";
        String fileName = "filename.txt";

        Path path = Paths.get(dirPath);
        if(!Files.exists(path)) {
            try {
                Files.createDirectories(path);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try (Writer writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(dirPath + fileName), "utf-8"))) {
            writer.write("something");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

您需要先创建目录,然后创建文件:

像这样:

String dirName = "/" + localDateTime.getYear() + "/" + localDateTime.getMonth().name();
    File file = new File(dirName);
    file.mkdirs();
    file = new File(file.getAbsolutePath()+"/quriReport.pdf");
    file.createNewFile();
如果你去你的项目目录,你会看到
2018/August/quriReport.pdf


但是
IDE
如果只有一个子文件夹

不起作用,则使用
显示子文件夹。我也得到了同样的结果,但我在本地跑步,效果很好。使用jasper report和spring boot验证目录名可能已获得slashI am的即时点,并导出为pdf文件,可能是因为这个原因。我更新了question@AmirChoubani检查我的answer@AmirChoubani验证创建文件的路径。上面的代码应该可以工作,它与引导或jasper无关。至少它将在JVM上运行。现在,您已经完全更改了已删除的答案,您使用的是与我对
文件给出的建议完全相同的建议。createDirectories
…@Eugene yup,可能我的错误捕捉器更多,我的坏,没有注意到你犯了什么错误?@sajib我想我已经解释清楚了。你解释了你的所作所为。但是需要弄清楚你面临的问题我想你现在可以解决你的问题了我给出了答案。只需转到您的项目目录,就可以找到所需的文件夹。我没有得到预期的结果。是的,就是这样。这是IDE显示子文件夹的方式:)
String dirName = "/" + localDateTime.getYear() + "/" + localDateTime.getMonth().name();
    File file = new File(dirName);
    file.mkdirs();
    file = new File(file.getAbsolutePath()+"/quriReport.pdf");
    file.createNewFile();