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

标签 java zipinputstream

场景:我有调用肥皂网络服务的代码,获取一个 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/

相关文章:

java - 添加 admob jar 文件和类未找到错误

java - arrayList.remove() 函数如何实现

java - 有什么方法可以对单个文件运行 Sonar 分析?

java - 删除从 zip 文件读取的 XML 文件中的空格

java - Kotlin 中的错误 "must not be null"

java.io.IOException : Stream closed ZipInputStream

java - JBI 和 SCA 之间有何区别/相似之处

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name XXX defined in class path resource