Сценарий: у меня есть код, который вызывает мыльный веб-сервис, получает вложение в виде zip-файла.Затем распаковывает его, просматривает все файлы, получает один нужный мне файл, который является файлом csv, и получает содержимое файла csv:
public static void unzipTry2(AttachmentPart att) throws IOException, SOAPException {
try (ZipInputStream zis = new ZipInputStream(att.getRawContent())) {
byte[] buffer = new byte[1024];
for (ZipEntry zipEntry = zis.getNextEntry(); zipEntry != null; zipEntry = zis.getNextEntry()) {
if (zipEntry.isDirectory()) {
continue;
}
if (!zipEntry.getName().equals("FileIwant.csv")) {
continue; //if it's not the file I want, skip this file
}
System.out.println(zipEntry.getName());
for (int len = zis.read(buffer); len > 0; len = zis.read(buffer)) {
//System.out.write(buffer, 0, len);
String testString = new String(buffer,0,len);
processCSVString(testString);
}
}
}
}
Работает просто отлично.Однако файл CSV, который я получаю, содержит только одну строку, что ожидается сейчас, но в будущем он может содержать несколько строк.Поскольку это файл CSV, мне нужно проанализировать LINE BY LINE.Этот код также должен работать для случая, когда файл CSV содержит несколько строк, и именно здесь я не уверен, работает ли он, поскольку нет способа проверить это (я не контролирую ввод этого метода, что всеисходит из веб-службы).
Можете ли вы сказать мне, читает ли внутренний цикл for содержимое файла LINE by LINE?:
for (int len = zis.read(buffer); len > 0; len = zis.read(buffer)) {
//System.out.write(buffer, 0, len);
String testString = new String(buffer,0,len);
processCSVString(testString);
}