0

ファイルを解凍して別のファイルに書き込んでいるときに、この問題に直面しています。これがコードです。誰でも、どのような変更が必要か教えてください。

私はこの例外を次の行で取得しますwhile ((len = zis.read(buffer)) > 0)

private FileItem readZippedFileRequest(HttpServletRequest request,Part part, String fileName) {

    FileItem fileItem = null;
    byte[] buffer = new byte[1024];

    InputStream inputStream = part.getInputStream();
    ZipInputStream zis = new ZipInputStream(inputStream);

    ZipEntry entry;    
    while ((entry = zis.getNextEntry()) != null) {

        ByteArrayOutputStream fos = new ByteArrayOutputStream();

        int len;
        while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }

        InputStream myByteArray = new ByteArrayInputStream(fos.toByteArray());
        fileItem = createCSVFile(myByteArray, fileName,ImportExportConstant.FILE_TYPE_EXCEL);
    }       

    return fileItem;
}
4

2 に答える 2

0

私もこのエラーがあり、少し検索しました...zis.closeEntry();前にあるに違いないことを読みましたが、試してみたところ、 Googleに尋ねたところlen = zis.read(buffer)にエラーが表示され、ここに答えがあります:zis.closeEntry();

!答え!

少し試して書いてから、aに切り替えてthrows IOExceptiontry/catch-block今は大丈夫です。例外はよく知られているバグです。すべてを a に入れtry/catch-block、catch では何もしない必要があります。

private FileItem readZippedFileRequest(HttpServletRequest request,Part part, String fileName) {

    FileItem fileItem = null;
    byte[] buffer = new byte[1024];
    try{
        InputStream inputStream = part.getInputStream();
        ZipInputStream zis = new ZipInputStream(inputStream);

        ZipEntry entry;    
        while ((entry = zis.getNextEntry()) != null) {

            ByteArrayOutputStream fos = new ByteArrayOutputStream();

            int len;
            while ((len = zis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
            }

            InputStream myByteArray = new   ByteArrayInputStream(fos.toByteArray());
            fileItem = createCSVFile(myByteArray, fileName,ImportExportConstant.FILE_TYPE_EXCEL);
        }       
    }catch(IOException ex){
        //Do nothing here
    }
    return fileItem;
}
于 2015-04-08T13:08:30.477 に答える