Java распаковать архивный файл - PullRequest
0 голосов
/ 21 ноября 2018

Я написал ниже программу для извлечения архивных файлов.Хотя он работает как требуется, я хотел бы получить ваши советы о возможных способах повышения его производительности и снижения сложности кода, или же можно достичь результатов гораздо более простым способом.

Кроме того, в commonExtracterМожно ли вместо создания каталогов периодически создавать временные папки для выполнения той же работы?Последний шаг должен быть похож на создание каталога и размещение в нем распакованной временной папки.

public class ExtractAllArchives {

    public static void main(String[] args) {
        File archiveFileLocation = new File("C:\\ZIP\\Sample.tar.gz");
//      File archiveFileLocation = new File("C:\\ZIP\\Root.zip");
        File destination = null;

        try {
            destination = new File(archiveFileLocation.getParent() + File.separator
                    + FilenameUtils.getBaseName(archiveFileLocation.getName()));
            if (destination.exists()) {
                FileUtils.deleteDirectory(destination);
            }
            destination.mkdir();
        } catch (IOException e) {
            e.printStackTrace();
        }

        String fileExtn = FilenameUtils.getExtension(archiveFileLocation.getAbsolutePath());
        String outputFolder = destination.getAbsolutePath();
        switch (fileExtn) {
        case "gz":
            try (TarArchiveInputStream ais = new TarArchiveInputStream(
                    new GzipCompressorInputStream(new BufferedInputStream(new FileInputStream(archiveFileLocation))))) {
                commonExtracter(ArchiveStreamFactory.TAR, ais, outputFolder);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            break;
        case "zip":
            try (ArchiveInputStream ais = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.ZIP,
                    new FileInputStream(archiveFileLocation))) {
                commonExtracter(ArchiveStreamFactory.ZIP, ais, outputFolder);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            break;
        default:
            System.out.println("No archive extractor found");
        }
        System.out.println("File extraction completed");
    }

    private static void commonExtracter(String archiveName, ArchiveInputStream ais, String outputFolder) {
        ArchiveEntry entry = null;
        try {
            while ((entry = ais.getNextEntry()) != null) {
                String filePath = outputFolder + File.separator + entry.getName();
                Path fileLoc = Paths.get(filePath);
                if (entry.isDirectory()) {
                    new File(filePath).mkdirs();
                } else {
                    try (OutputStream bos = Files.newOutputStream(fileLoc)) {
                        IOUtils.copy(ais, bos);
                    } catch (Exception e) {
                        System.out.println("Failed to create the output file");
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Any help on this topic is much appreciated.

Thank you.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...