gpt4 book ai didi

java - 关于在java中读取ZipInputStream/ZipEntry的问题

转载 作者:行者123 更新时间:2023-12-02 03:13:38 25 4
gpt4 key购买 nike

场景:我有调用肥皂网络服务的代码,获取一个 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 文件,所以我需要逐行解析。此代码还必须适用于 CSV 文件包含多行的情况,这就是我不确定它是否有效的情况,因为无法测试它(我不控制此方法的输入,所有来自网络服务)。

你能告诉我内部for循环是否逐行读取文件的内容吗? :

            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);
}

最佳答案

BufferedReader是 Java“东西”,它可以读取 Reader逐行。你需要的胶水是InputStreamReader 。然后您可以将 ZipInputStream 包装为

BufferedReader br=new BufferedReader(new InputStreamReader(zis))

(最好在 try-with-resources block 中),从 BufferedReader 读取的经典循环如下所示:

String line;
while((line=br.readLine())!=null){
<process one line>
}

关于java - 关于在java中读取ZipInputStream/ZipEntry的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56977293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com