临时目录创建

Ad-hoc directory creation

在下面的代码中,我在 RHEL 服务器上已创建的目录中写入一个名为 employee_status_downloader_unixtimestamp.csv 的文件,如下面的代码行所示:

FileWriter fw = new FileWriter("/srv/file_users/JACK/employee_status_downloader_"+unixTimestamp+".csv");

所以,我手动创建了一个名为JACK的文件夹,然后指定了上面的路径,这样userNameJACK相关的文件就在JACK文件夹里面了。

因为 userName 可以不同,而且我已经在我的方法 sendMessage 中得到了 userName,如下面这行代码 String userName = parts[1].trim(); 所示,我想知道我是否可以利用这个 根据 userName?

创建目录

所以,我在这里没有使用 System.getProperty("user.name");,因为我已经在上面的方法中得到了 userName,我相信这足以创建一个临时目录。

在网上看了之后,我发现人们 suggesting here(Bozho's answer) 会做这样的事情:

File fl = new File("/path/directory").mkdirs(); 其中 directory 是我想要 create/exist 的目录名称。但是由于我在上面使用 FileWriter,我想知道我应该如何同时使用这两者,以便 我也可以创建一个目录,如果它不存在,然后在目录中写入一个文件。

public void sendMessage(String msg) throws DaoException {

        String[] parts = msg.split("#");
        String requestID = parts[0].trim();
        String userName = parts[1].trim();
        String applicationName = parts[2].trim();

        logger.info("Request ID " + requestID);
        logger.info("User Name " + userName);
        logger.info("Application Name " + applicationName);



        try {


            FileWriter fw = new FileWriter("/srv/file_users/JACK/employee_status_downloader_" + unixTimestamp + ".csv");

            CSVWriter writer = new CSVWriter(fw);

            writer.writeAll(rsDemo, true);
            writer.close();
            fw.close();


        } catch (Throwable th) {
            throw new DaoException(th.getMessage(), th);
        } finally {


        }



    }
    long unixTimestamp = Instant.now().getEpochSecond();

无论您对字符串中的路径做什么,都可以通过参数化字符串以参数化的方式进行。你有这个:

String userName = parts[1].trim();
...
FileWriter fw = new FileWriter("/srv/file_users/JACK/employee_status_downloader_" + unixTimestamp + ".csv");

所以你可以这样做:

String userName = parts[1].trim();
...
FileWriter fw = new FileWriter("/srv/file_users/" + userName + "/employee_status_downloader_" + unixTimestamp + ".csv");

如果您想确保该文件夹存在,请将代码更改为:

File dir = new File("/srv/file_users/", userName);
dir.mkdirs();
FileWriter fw = new FileWriter(new File(dir, "/employee_status_downloader_" + unixTimestamp + ".csv"));

更好的是,使用更新的 NIO 方法并使用 try-with-resources 来确保文件正确关闭。

Path dir = Paths.get("/srv/file_users", userName);
Files.createDirectories(dir);

Path file = dir.resolve("employee_status_downloader_" + unixTimestamp + ".csv");
try (CSVWriter writer = new CSVWriter(Files.newBufferedWriter(file))) {
    writer.writeAll(rsDemo, true);
}