Во-первых, я бы посоветовал вам разбить ваш код на несколько разных методов.Здесь много повторений.
Я немного озадачен тем, пытаетесь ли вы написать один ResultSet для каждого из файлов или все три для каждого файла.Частично это файлы file
, fileFacts
и fileEncounters
, которые нигде не упомянуты.
Если вы пытаетесь поместить один ResultSet в каждую запись, вы можете использоватьСопоставить файл с ResultSet, а затем перебрать записи или ключи.Что-то вроде ....
....
Map<String,ResultSet> dataMap = new HashMap<>();
dataMap.put(file.getFileName().toString(),resultSetFirst);
dataMap.put(filefacts.getFileName().toString(),resultSetSecond);
dataMap.put(fileEncounters.getFileName().toString(),resultSetThird);
for (Map.Entry<String,ResultSet> e : dataMap.entrySet()){
zos.putNextEntry(new ZipEntry(e.getKey()));
try (CSVWriter writer = new CSVWriter(new OutputStreamWriter(zos,StandardCharsets.UTF_8))){
writer.writeAll(e.getValue(), true);
writer.flush();
zos.closeEntry();
}
}
....
Но, вероятно, было бы проще и понятнее просто использовать метод ...
....
makeEntry(zos,file.getFileName().toString(),resultSetFirst);
makeEntry(zos,filefacts.getFileName().toString(),resultSetSecond);
makeEntry(zos,fileEncounters.getFileName().toString(),resultSetThird);
....
}
private static void makeEntry(ZipOutputStream zos,String name, ResultSet res) throws SomeExceptions{
zos.putNextEntry(new ZipEntry(name));
try (CSVWriter writer = new CSVWriter(new OutputStreamWriter(zos,StandardCharsets.UTF_8))){
writer.writeAll(res, true);
writer.flush();
zos.closeEntry();
}
}
Таким образом, вам не нужно создавать иЗаполните карту (или список) только для того, чтобы запустить один и тот же код три раза.
Вы можете / должны по-прежнему использовать метод, если решите итерировать по карте, чтобы сделать вещи более понятными:
Map<String,ResultSet> dataMap = new HashMap<>();
dataMap.put(file.getFileName().toString(),resultSetFirst);
dataMap.put(filefacts.getFileName().toString(),resultSetSecond);
dataMap.put(fileEncounters.getFileName().toString(),resultSetThird);
for (Map.Entry<String,ResultSet> e : dataMap.entrySet()){
makeEntry(zos, e.getKey(), e.getValue());
}
...
Ищите другие области, подобные этой, чтобы преобразовать методы.Приличным правилом является создание метода каждый раз, когда вы думаете, что должны вырезать и вставить код.
Обратите внимание, что ни один из этого кода на самом деле не был скомпилирован или запущен