Использование метода newOutputStream для определения местоположения файла - PullRequest
0 голосов
/ 14 июня 2019

У меня следующий код, работающий нормально с точки зрения создания файла CSV (показан только соответствующий код ниже):

rsCompany = pstmtCompany.executeQuery();
Path dir = Paths.get("/srv/custom_users", userName);
Files.createDirectories(dir);

Path filecompany = dir.resolve("company_custom_file_" + unixTimestamp + ".csv");
    try (CSVWriter writer = new CSVWriter(Files.newBufferedWriter(filecompany))) {
            writer.writeAll(rsCompany, true);
  }

Теперь, допустим, я хочу создать zip-файл для того же самого, как мне использовать переменную dir (которую я использовал в приведенном выше сценарии) в этой строке FileOutputStream fos = new FileOutputStream("your_files.zip"); кода ниже?

Я имею в виду, я должен определить следующие вещи:

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

FileOutputStream fos = new FileOutputStream("your_files.zip");
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos); 


ZipEntry entry = new ZipEntry(file.getFileName().toString());
zos.putNextEntry(entry);
try (CSVWriter writer = new CSVWriter(new OutputStreamWriter(zos,StandardCharsets.UTF_8)))) {
       writer.writeAll(rsDemo, true);
       writer.flush();
       zos.closeEntry();
}
zos.close();

Если я продолжу и использую newOutputstream метод класса Files, это может выглядеть следующим образом:

FileOutputStream fos = new FileOutputStream(Files.newOutputStream(dir)); 

Это правильный путь?

Мне интересно, куда мне поместить имя zip-файла, то есть your_files.zip, которое я определил в предыдущей строке кода FileOutputStream("your_files.zip");?

1 Ответ

2 голосов
/ 14 июня 2019

Вам не нужен FileOutputStream. На всех.

Вам нужен только OutputStream, и вот что возвращает Files.newOutputStream:

OutputStream fos = Files.newOutputStream(dir.resolve("your_files.zip"));
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos); 
...