Специальное создание каталога - PullRequest
0 голосов
/ 02 апреля 2019

В приведенном ниже коде я пишу файл с именем employee_status_downloader_unixtimestamp.csv в уже созданный каталог на сервере RHEL, как показано в этой строке кода ниже:

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

Итак, я вручную создал папку с именем JACK и указал указанный выше путь, чтобы файлы, связанные с userName JACK, находились внутри папки JACK.

Поскольку userName может отличаться, и я уже получаю userName в моем методе sendMessage, как показано ниже из этой строки кода String userName = parts[1].trim();, мне интересно, смогу ли я использовать это создать каталог на основе userName?

Итак, я не использую System.getProperty("user.name"); здесь, так как я уже получаю userName в моем методе, описанном выше, что, я считаю, достаточно для создания специального каталога.

Посмотрев онлайн, я обнаружил, что люди предлагают здесь (ответ Божо) сделать что-то вроде этого:

File fl = new File("/path/directory").mkdirs(); где каталог - это имя каталога, который я хочу создать / существовать. Но так как я использую 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();

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Если вы хотите убедиться, что папка существует, измените код на:

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);
}
0 голосов
/ 02 апреля 2019

Что бы вы ни делали с путем в строке, вы можете сделать это параметризованным способом, параметризовав строку.У вас есть это:

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...