【问题标题】:Problems extracting Zip in Java在 Java 中提取 Zip 的问题
【发布时间】:2014-06-06 15:50:49
【问题描述】:

我一直在尝试使用优秀的 java 在我的程序中提取一些 zip 文件并将它们放在正确的目录中。我一直在寻找这个以供参考: http://javabeginnerstutorial.com/code-base/how-to-extract-zip-file-with-subdirectories/

我当前的代码看起来像

                String ziplocation = "/home/user/folder/";
                String zipfile = "libraries.zip";
                String liblocation = "/home/user/folder";

                ZipEntry zipentry;

                if (!zipentry.isDirectory())
                {
                    File fileFile = new File(liblocation + "/" + zipentry.getName());

                    InputStream inputstream = zipfile.getInputStream(zipentry);
                    String str = new java.util.Scanner(inputstream).useDelimiter("/A").next();

                    BufferedWriter bw = new BufferedWriter(new FileWriter(fileFile));
                    bw.append(str);
                    bw.close();

                }

一切似乎都正确地改编自上述参考,但是当我编译时它给了我:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The method getInputStream(ZipEntry) is undefined for the type String

at Main.main(Main.java:53)

编辑:

我现在改成

                String ziplocation = "/home/user/folder/zipfile.zip";
                String liblocation = "/home/user/folder/";

                File file = new File(ziplocation);
                ZipFile zipfile = new ZipFile(file);
                InputStream inputStream = new BufferedReader(new FileReader(zipfile));

                ZipEntry zipentry;

                if (!zipentry.isDirectory())
                {
                    File fileFile = new File(liblocation + "/" + zipentry.getName());

                    InputStream inputstream = zipfile.getInputStream(zipentry);
                    String str = new java.util.Scanner(inputstream).useDelimiter("/A").next();

                    BufferedWriter bw = new BufferedWriter(new FileWriter(fileFile));
                    bw.append(str);
                    bw.close();

                }

但是现在编译器的响应是:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Type mismatch: cannot convert from BufferedReader to InputStream
The constructor FileReader(ZipFile) is undefined

at Main.main(Main.java:48)

【问题讨论】:

  • 在提到的文章中zipfileZipFile zipfile = new ZipFile(file);。在您的代码中是String zipfile = "libraries.zip";。正如您的错误消息所说:“getInputStream(ZipEntry) 类型的方法未定义 String
  • Pshemo,为什么不回答一下呢?

标签: java zip extract subdirectory


【解决方案1】:

这意味着字符串对象没有 getInputStream 方法。在这一行: zipfile.getInputStream(zipentry);

zipfile 是一个字符串。

你需要类似的东西 InputStream inputStream = new BufferedReader(new FileReader(zipfile));

这里对 IO 流进行了很好的讨论:http://docs.oracle.com/javase/tutorial/essential/io/streams.html

【讨论】:

    【解决方案2】:

    问题出在句子里:

    InputStream inputStream = new BufferedReader(new FileReader(zipfile));
    

    该句子不在您所遵循的示例中。相反,在 zipfile 中的元素之间存在一个循环:

    File file = new File(zipFileLocation);
    ZipFile zipfile = new ZipFile(file);
    
    ZipEntry zipentry;
    
    System.out.println("nList of files in zip archive");
    int fileNumber = 0;
    for (Enumeration<? extends ZipEntry> e = zipfile.entries(); e
            .hasMoreElements(); fileNumber++) {
        zipentry = e.nextElement();
    
        if (!zipentry.isDirectory()) {
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多