当前位置: 首页 > 面试题库 >

读取zip存档中的文本文件

澹台华晖
2023-03-14
问题内容

我有一个zip存档,其中包含一堆纯文本文件。我想解析每个文本文件的数据。到目前为止,这是我写的内容:

try {
    final ZipFile zipFile = new ZipFile(chooser.getSelectedFile());
    final Enumeration<? extends ZipEntry> entries = zipFile.entries();
    ZipInputStream zipInput = null;

    while (entries.hasMoreElements()) {
        final ZipEntry zipEntry = entries.nextElement();
        if (!zipEntry.isDirectory()) {
            final String fileName = zipEntry.getName();
            if (fileName.endsWith(".txt")) {
                zipInput = new ZipInputStream(new FileInputStream(fileName));
                final RandomAccessFile rf = new RandomAccessFile(fileName, "r");
                String line;
                while((line = rf.readLine()) != null) {
                    System.out.println(line);
                }
                rf.close();
                zipInput.closeEntry();
            }
        }
    }
    zipFile.close();
}
catch (final IOException ioe) {
    System.err.println("Unhandled exception:");
    ioe.printStackTrace();
    return;
}

我需要一个RandomAccessFile来做到这一点吗?我在拥有ZipInputStream的地方迷路了。


问题答案:

不,您不需要RandomAccessFile。首先获取InputStream此zip文件条目的数据:

InputStream input = zipFile.getInputStream(entry);

然后将其包装为InputStreamReader(从二进制解码为文本)和a BufferedReader(一次读取一行):

BufferedReader br = new BufferedReader(new InputStreamReader(input, "UTF-8"));

然后像往常一样从中读取行。try/finally像往常一样将所有适当的位包装在块中,以关闭所有资源。



 类似资料:
  • 我一直在尝试读取ZIP存档中的PHP文件。我编写了以下代码,它可以读取文本文档和回显而没有错误,但当我用PHP文件测试时,什么都没有出现。那么我可以做些什么来读取PHP文件而不提取呢? 提前感谢!

  • 问题内容: 我需要在zip文件中读取单个文件“ test.txt”的内容。整个zip文件是一个非常大的文件(2gb),其中包含很多文件(10,000,000),因此,提取整个文件对我而言不是可行的解决方案。如何读取单个文件? 问题答案: 尝试使用包装器: 您也可以使用:

  • 问题内容: 我的用例要求我打开一个txt文件,例如abc.txt,该文件位于zip归档文件中,该归档文件包含以下格式的键值对: key1 = value1 key2 = value2 ..依此类推,每个键值对都位于新行中。我必须更改与某个键对应的一个值,然后将文本文件放回存档的新副本中。如何在Java中执行此操作? 到目前为止,我的尝试: 问题答案: 您几乎完全正确。一种可能的原因,该文件显示为已

  • 问题内容: 我试图从战争档案中读取文本文件,并在运行时将其内容显示在facelets页面中。我的文件夹结构如下 +战争档案> +资源> +电子邮件> + file.txt 我尝试使用以下代码读取resources / email / file.txt文件夹中的文件 但是问题是当我运行上面代码的方法时,会抛出A。我也尝试使用以下代码行获取文件,但未成功 我仍然得到。这是怎么引起的,我该如何解决? 问

  • 在Eclipse中为我的XXXXClient(web服务)项目运行Maven安装时,我反复收到以下消息:“项目”XXXXClient“中的required Library:'x:/xxxx/xxxx/.m2/repository/javax/enterprise/CDI-API/1.0-sp4-redhat-4/CDI-API-1.0-sp4-redhat-4.jar'无法读取或不是有效的ZIP文

  • 问题内容: 我的情况是我有一个包含一些文件(txt,png,…)的zip文件,我想直接按它们的名称读取它,我已经测试了以下代码,但没有结果(NullPointerExcepion): resources 是一个包, zipfile 是一个zip文件。 问题答案: 如果您可以确定您的zip文件永远不会打包在另一个jar中,则可以使用以下方法: 要么: 否则,您的选择是: 使用ZipInputStre