Java-如何从zip文件中的CSV文件中获取行数

Java-如何从zip文件中的CSV文件中获取行数,java,Java,我在特定位置有多个zip文件。 每个Zip文件包含一个CSV文件。我尝试了下面的代码来读取每个zip文件,并获得zip中的CSV计数,最后,我打印每个文件的行数总和。代码正在执行,没有错误,但打印的最终值无效。任何帮助都将不胜感激 File1.csv-位于File1.Zip中 File2.csv-位于File2.Zip中 您需要使用ZipFile/ZipEntry类来读取ZIP中的文件。 以下代码应满足您的需要: try (DirectoryStream<Path> dir = Fi

我在特定位置有多个zip文件。 每个Zip文件包含一个CSV文件。我尝试了下面的代码来读取每个zip文件,并获得zip中的CSV计数,最后,我打印每个文件的行数总和。代码正在执行,没有错误,但打印的最终值无效。任何帮助都将不胜感激

File1.csv-位于File1.Zip中

File2.csv-位于File2.Zip中


您需要使用ZipFile/ZipEntry类来读取ZIP中的文件。 以下代码应满足您的需要:

try (DirectoryStream<Path> dir = Files.newDirectoryStream(Paths.get(archivePath), "*.zip")) {
       for (Path entry : dir) {
          ZipFile zipFile =  new ZipFile(entry.getFileName().toString());
          Enumeration<? extends ZipEntry> entries = zipFile.entries();
          while(entries.hasMoreElements()){
               ZipEntry zipEntry = entries.nextElement();
               reader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry),"UTF-8"));
               while ((reader.readLine()) != null) {
                        totalLines++;
               }          
          }
          reader.close();
       }
       System.out.println("Total sum of rows from all files-> " + totalLines);   // expected o/p (5+2):  7  actual o/p : 13
} catch (Exception e) { e.printStackTrace(); }

您的条目是archivePath中的一个文件。获取文件名,你将它推到文件名,请考虑java命名约定…您将为该文件名打开一个新文件,并为该文件打开一个读取器。LineNumberReader将读取“我不知道是什么”,但最肯定的是,不会读取您手头的文件中的行数,该文件很可能是一个zip文件。您需要先解压缩该zip文件。@Bluddymari代码在我直接从CSV文件读取行数时打印预期输出。i、 e.文件掩码为.csv。所以LineNumberReader给了我CSV文件中的行数。但在未提取.zip的情况下获取计数时会导致不正确的结果。有没有一种方法可以在不提取Zip的情况下获得CSV文件中的行数。Totalines++只会得到总文件数在我的情况下它会打印2。我不想要总文件数,我想要Zip文件中每个CSV文件的行数。谢谢,@funkyjelly更新的代码工作正常。但它只适用于我在帖子中发布的示例文件。对于以zip格式从Salesforce下载的实际CSV文件,显示的计数不正确。不确定,但我认为这一定是CSV行分隔符的问题,而且每列的数据都包含在双引号文本附件中。是否有方法处理此问题并获得正确的计数?@Vikas您可以发布这些其他CSV文件的一些示例内容吗?
try (DirectoryStream<Path> dir = Files.newDirectoryStream(Paths.get(archivePath), "*.zip")) {
       for (Path entry : dir) {
          ZipFile zipFile =  new ZipFile(entry.getFileName().toString());
          Enumeration<? extends ZipEntry> entries = zipFile.entries();
          while(entries.hasMoreElements()){
               ZipEntry zipEntry = entries.nextElement();
               reader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry),"UTF-8"));
               while ((reader.readLine()) != null) {
                        totalLines++;
               }          
          }
          reader.close();
       }
       System.out.println("Total sum of rows from all files-> " + totalLines);   // expected o/p (5+2):  7  actual o/p : 13
} catch (Exception e) { e.printStackTrace(); }