-2

我正在编写一个需要提取 zip 文件的程序。我有应该可以工作的代码,但由于某种原因抛出了java.io.FileNotFoundException.

这是方法:

private static void unzip() {
    ZipInputStream input = null;
    try {
        input = new ZipInputStream(new BufferedInputStream(new FileInputStream(SERVER_FOLDER + File.separator + "folder" + File.separator + "mods.zip")));
    } catch (FileNotFoundException e) {
        System.err.println("The program has encountered an error and needs to stop.\nPlease notify the program author of this problem.");
        e.printStackTrace();
        System.exit(-1);
    }

    ZipEntry entry;
    final int BUFFER = 8192;

    System.out.print("Extracting...");

    try {
        byte[] data = new byte[BUFFER];
        while ((entry = input.getNextEntry()) != null) {
            BufferedOutputStream output = new BufferedOutputStream(
                    new FileOutputStream(entry.getName()), BUFFER);
            int count;
            while ((count = input.read(data, 0, BUFFER)) != -1) {
                output.write(data, 0, BUFFER);
            }
            input.closeEntry();
            output.flush();
            output.close();
        }
        input.close();
    } catch (IOException e) {
        System.err.println("The installer has encountered an error and needs to stop.\nPlease notify the program author of this problem.");
        e.printStackTrace();
        System.exit(-1);
    }
    System.out.println("Done");
}

这会产生以下控制台输出:

java.io.FileNotFoundException: META-INF/MANIFEST.MF (No such file or directory)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
    at me.smithb99.installer.ServerInstaller.unzipMods(ServerInstaller.java:330)
    at me.smithb99.installer.ServerInstaller.installServer(ServerInstaller.java:84)
    at me.smithb99.installer.Main.main(Main.java:71)
4

1 回答 1

2

为什么 BufferedOutputStream 正在寻找 META-INF/MANIFEST.MF?

它不是。查看堆栈跟踪。new FileOutputStream(...)正在寻找它。

为什么?因为

new FileOutputStream(entry.getName()), BUFFER)

遇到该路径,该路径由entry.getName().

于 2015-03-23T03:44:06.317 回答