Как читать файлы в zip-файле? - PullRequest
0 голосов
/ 18 октября 2018

пожалуйста, помогите.Я хочу читать файлы из zip-файла.Мой почтовый файл поставляется как MultipartFile.Затем я брал его входной файл с помощью ZipInputStream, однако он выдает ошибку, не найдя файл.

    public String importProject(MultipartFile file) throws IOException, ParseException {
    //Reading the input of zip file,
    ZipInputStream zin = new ZipInputStream(file.getInputStream());
    ZipEntry ze;
    FileInputStream excel = null;
    ArrayList<AnimationSvg> animationSvgs = new ArrayList<>();
    while ((ze = zin.getNextEntry()) != null) {
        if(ze.getName().contains(".xlsx")){
            excel = new FileInputStream(ze.getName());
        }
        else if(ze.getName().contains(".svg")){
            FileInputStream svg = new FileInputStream(ze.getName());
            AnimationSvg animationSvg = new AnimationSvg();
            animationSvg.setName(ze.getName());
            StringBuilder svgContent = new StringBuilder();
            int i;
            while((i = svg.read())!=-1) {
                svgContent.append(String.valueOf((char) i));
            }
            animationSvg.setSvgContent(String.valueOf(svgContent));
            animationSvgs.add(animationSvg);
        }
        zin.closeEntry();
    }
    zin.close();

1 Ответ

0 голосов
/ 18 октября 2018

Запись в zip-архиве не является файлом.Это просто последовательность сжатых байтов в zip-файле.

Не использовать FileInputStream вообще.Просто прочитайте данные zip-записи из вашего ZipInputStream:

Path spreadsheetsDir = Files.createTempDirectory(null);
Path excel = null;

while ((ze = zin.getNextEntry()) != null) {
    String name = ze.getName();
    if (name.endsWith(".xlsx")) {
        excel = spreadsheetsDir.resolve(name));
        Files.copy(zin, excel);
    } else if (name.endsWith(".svg")) {
        AnimationSvg animationSvg = new AnimationSvg();
        animationSvg.setName(name);
        animationSvg.setSvgContent(
            new String(zin.readAllBytes(), StandardCharsets.UTF_8));
        animationSvgs.add(animationSvg);
    }
    zin.closeEntry();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...