写入带有子文件夹的新文件时自动创建完整路径

时间:2018-08-02 09:32:13

标签: java path

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

我这样使用它:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

我在名为filename.txt的文件夹下得到文件dir1.dir2

我需要dir1/dir2

enter image description here

我该如何实现?

请不要将此问题标记为重复,因为重新研究后我没有得到所需的东西。

更新1

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

我需要在目录名current year下创建文件。在此文件夹下,我需要创建一个名为the current month的目录,并且应该在该目录下导出pdf文件。示例:

  

(2018 / auguest / report.pdf)

我正在使用LocalDateTime来获取yearmonth

这是我的代码的一部分:

    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, "");

这就是我得到的:

enter image description here

4 个答案:

答案 0 :(得分:1)

尝试以下符合您期望的代码

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

您需要先创建文件夹结构,然后再创建文件

答案 1 :(得分:1)

首先,创建目录,然后创建一个要写入的新文件。

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();
        }
    }
}

答案 2 :(得分:1)

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

赞:

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.会显示one subfolder的子文件夹。

答案 3 :(得分:0)

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
Files.createDirectories(file.getParentFile().toPath());
FileWriter writer = new FileWriter(file);
writer.write("jora");
writer.close();