сбой потери входного потока ZLIB при использовании try с ресурсами - PullRequest
0 голосов
/ 17 октября 2018

У меня есть функция для распаковки почтовых индексов с несколькими записями.Иногда возникает исключение, которое сообщает «Неожиданный конец входного потока ZLIB».По моему мнению, это невозможно, потому что я использую попытку с ресурсами.

private boolean decompress(final Path blf) {

    final String pathToZip = blf.getParent().toString();

    final byte[] buffer = new byte[8192];

    try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(blf.toFile()))) {

        //We will unzip files in this folder
        if (!Files.exists(Paths.get(pathToZip))) {
            Files.createDirectory(Paths.get(pathToZip));
        }

        ZipEntry entry = zipInputStream.getNextEntry();
        final Path pathToFile = Paths.get(pathToZip + "\\" + entry.getName());

        //Faster procedure if the file already exists
        if (Files.exists((pathToFile))) {
            loggerAnalysis.log(new LogRecord(Level.INFO, "[Analysis]",
                    "File already exists, skipping" + pathToFile));
            return true;
        }
        //Iterate over entries
        while (entry != null) {

            //If directory then create a new directory in uncompressed folder
            if (entry.isDirectory()) {
                loggerAnalysis.log(new LogRecord(Level.INFO, "[Analysis]",
                        "Creating Directory:" + pathToFile));

                Files.createDirectories(pathToFile);
            } else {
                Files.createFile(pathToFile);
                loggerAnalysis.log(new LogRecord(Level.INFO, "[Analysis]",
                        "File unzip: " + pathToFile.getFileName()));

                try (FileOutputStream fileOutputStream = new FileOutputStream(pathToFile.toString())) {
                    int len;

                    while ((len = zipInputStream.read(buffer)) > 0) {
                        fileOutputStream.write(buffer, 0, len);
                    }
                }
                entry = zipInputStream.getNextEntry();
            }
        }
        return true;
    } catch (final IOException e) {
        loggerAnalysis.log(new LogRecord(Level.ERROR, "[Analysis]", e.getMessage()));
        return false;
    }
}

С наилучшими пожеланиями

...