如何在JCIFS中解压缩zip文件

时间:2018-06-07 08:58:47

标签: java jcifs

我在远程服务器上有zip文件,我使用JCIFS访问它。我想只在远程服务器上提取该zip的内容。尝试过:

private void unzipFile(SmbFile zipFile) {

    try {
        String destPath = "//SHARED-PC/reports/";

        int BUFFER_SIZE = 4096;

        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath));
        byte[] bytesIn = new byte[BUFFER_SIZE];
        int read = 0;
        while ((read = zipFile.getInputStream().read(bytesIn)) != -1) {
            bos.write(bytesIn, 0, read);
        }
        bos.close();

    }catch(Exception e) {
        logger.error(" Error while unzipping zip file "+zipFile+" "+zipFile.getName());
        e.printStackTrace();
    }

}

但是它总是在错误中重新出现  1.访问被拒绝  2.我更改了dest文件夹的给定路径 - (文件名,目录名或卷标语法不正确)

有人可以建议如何做到这一点吗? Thanx提前

更新: 根据Petesh的建议,我使用ZipInputStream从zip文件中提取文件。 我试过了:

private static void unzip(SmbFile zipFilePath, String destDir) throws SmbException {
    System.out.println(" Unzipping  ::  "+zipFilePath); //smb://WIN-B3TN6C0DC94/My_daily_reports/19-5-2018/Success/100-Sales-Records-19-5-2018.zip
    System.out.println(" destdir is ::  "+destDir); // smb://WIN-B3TN6C0DC94/My_daily_reports/19-5-2018/Success/


    try {
        ZipInputStream zis = new ZipInputStream(zipFilePath.getInputStream());
        ZipEntry ze = zis.getNextEntry();

        String fileName = ze.getName();
        File newFile = new File(destDir);
        System.out.println("newfile Path  :  "+newFile.getPath());

        byte[] buf = new byte[1024];
        String outputFilepathAndName = newFile.getPath() + File.separator + fileName;
        System.out.println("outputFilepathAndName :: "+outputFilepathAndName);
        OutputStream outputStream = new FileOutputStream(fileName);
        while(ze != null){
            int length;
            while((length = zis.read(buf)) != -1) {
                outputStream.write(buf, 0, length);
            }
        }
        System.out.println("Write done // flushing now... ");

        zis.closeEntry();
        zis.close();
        outputStream.close();

        System.out.println("  UNZIP SUCCESSFUL "+fileName);

    } catch (Exception e) {

        System.out.println(" UNZIP ERROR");
        e.printStackTrace();

    }
}

但它在循环中陷入困境。任何人都可以建议这里出了什么问题。我也尝试使用OutputStream和BufferedOutputStream。

0 个答案:

没有答案
相关问题