精华内容
下载资源
问答
  • zipentry
    2021-05-15 18:20:36

    java生成压缩文件 ZipEntry出现乱码的问题

    在项目中,一次导出的文件有好几个,而且文件内容比较大,最后考虑到把文件进行压缩在下载,开始试用JDK自带的ZIP压缩包时,ZipEntry ze = new ZipEntry(fileName);//这是压缩包名里的文件名  如果filename是中中文时,文件名就会出现乱码,最后换成apache的zip就没有这个问题了,相关的类都在ant包里,import更新如下:

    // import java.util.zip.ZipEntry;

    // import java.util.zip.ZipOutputStream;

    import org.apache.tools.zip.ZipEntry;

    import org.apache.tools.zip.ZipOutputStream;

    具体压缩方法如下,文件路径等内容由于是测试直接写死在代码中

    /**

    * 生成压缩文件

    * @param tBaseReportForm

    */

    public void createZip(TBaseReportForm tBaseReportForm) throws Exception{

    FileOutputStream fos = new FileOutputStream("d:/性能分析数据报表.zip");

    BufferedOutputStream bos = new BufferedOutputStream(fos);

    ZipOutputStream zos = new ZipOutputStream(bos);//压缩包

    for(String fileName : tBaseReportForm.getPrintFileName()){

    File f = new File("d:/" + fileName);

    FileInputStream fis = new FileInputStream(f);

    BufferedInputStream bis = new BufferedInputStream(fis);

    byte[] buf = new byte[1024];

    int len;

    ZipEntry ze = new ZipEntry(fileName);//这是压缩包名里的文件名

    zos.putNextEntry(ze);//写入新的 ZIP 文件条目并将流定位到条目数据的开始处

    while((len=bis.read(buf))!=-1)

    {

    zos.write(buf,0,len);

    zos.flush();

    }

    fis.close();

    bis.close();

    }

    zos.close();

    }

    1 楼

    54五味子

    2012-03-14

    ant包在哪里啊?

    哥哥

    什么版本》?

    更多相关内容
  • java中的ZipEntry是什么意思?

    千次阅读 2021-03-04 03:28:23
    展开全部ZipEntry类是java.util.zip包下的一个类,ZipEntry类用于表示 ZIP 文件条32313133353236313431303231363533e58685e5aeb931333337396230目。利用这个类压缩和解压zip文件具体压缩的例子如下:importjava.io....

    展开全部

    ZipEntry 类是java.util.zip包下的一个类,

    ZipEntry 类用于表示 ZIP 文件条32313133353236313431303231363533e58685e5aeb931333337396230目。

    利用这个类压缩和解压zip文件

    具体压缩的例子如下:import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.util.zip.ZipEntry;

    import java.util.zip.ZipOutputStream;

    /**

    * 压缩程序

    * @author young

    *

    */

    public class SingleFileZip {

    public static void main(String[] args) {

    File file = new File("e:/test.txt");

    FileInputStream fis = null;

    ZipOutputStream zos = null;

    try {

    fis = new FileInputStream(file);

    zos = new ZipOutputStream(new FileOutputStream("e:/my.zip"));

    // 创建压缩文件中的条目

    ZipEntry entry = new ZipEntry(file.getName());

    // 将创建好的条目加入到压缩文件中

    zos.putNextEntry(entry);

    // 写入当前条目所对应的具体内容

    byte[] buff = new byte[1024];

    int len = 0;

    while ((len = fis.read(buff)) != -1) {

    zos.write(buff, 0, len);

    }

    } catch (FileNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } finally {

    try {

    fis.close();

    zos.close();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

    解压例子如下:import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.zip.ZipEntry;

    import java.util.zip.ZipFile;

    import java.util.zip.ZipInputStream;

    /**

    * 解压程序

    * @author young

    *

    */

    public class SingleFileUnZip {

    public static void main(String[] args) {

    FileOutputStream fos = null;

    ZipInputStream zis = null;

    InputStream is = null;

    try {

    ZipFile zf = new ZipFile("e:/my.zip");

    zis = new ZipInputStream(new FileInputStream("e:/my.zip"));

    fos = new FileOutputStream("e:/unzip.txt");

    // 从压缩文件中获取一个条目

    ZipEntry entry = zis.getNextEntry();

    // 获得该条目对象的数据流

    is = zf.getInputStream(entry);

    byte[] buff = new byte[1024];

    int len = 0;

    while ((len = is.read(buff)) != -1) {

    fos.write(buff, 0, len);

    }

    } catch (FileNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } finally {

    try {

    is.close();

    zis.close();

    fos.close();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

    展开全文
  • ZipEntry getNextEntry()

    2021-03-06 18:30:31
    ZipEntry getNextEntry()描述 (Description)java.util.zip.ZipInputStream.getNextEntry()方法读取下一个ZIP文件条目,并将流定位在条目数据的开头。声明 (Declaration)以下是java.util.zip.ZipInputStream....

    ZipEntry getNextEntry()

    描述 (Description)

    java.util.zip.ZipInputStream.getNextEntry()方法读取下一个ZIP文件条目,并将流定位在条目数据的开头。

    声明 (Declaration)

    以下是java.util.zip.ZipInputStream.getNextEntry()方法的声明。public ZipEntry getNextEntry()

    throws IOException

    返回值 (Returns)

    下一个ZIP文件条目,如果没有更多条目,则返回null。

    异常 (Exceptions)ZipException - 如果发生ZIP文件错误。

    IOException - 如果发生I/O错误。

    先决条件

    在D:》 test 》目录中创建一个文件Hello.txt,其中包含以下内容。This is an example.

    例子 (Example)

    以下示例显示了java.util.zip.ZipInputStream.getNextEntry()方法的用法。package com.iowiki;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.util.Date;

    import java.util.zip.Adler32;

    import java.util.zip.CheckedOutputStream;

    import java.util.zip.ZipEntry;

    import java.util.zip.ZipInputStream;

    import java.util.zip.ZipOutputStream;

    public class ZipInputStreamDemo {

    private static String SOURCE_FILE = "D:\\test\\Hello.txt";

    private static String TARGET_FILE = "D:\\test\\Hello.zip";

    public static void main(String[] args) {

    try {

    createZipFile();

    readZipFile();

    } catch(IOException ioe) {

    System.out.println("IOException : " + ioe);

    }

    }

    private static void createZipFile() throws IOException{

    FileOutputStream fout = new FileOutputStream(TARGET_FILE);

    CheckedOutputStream checksum = new CheckedOutputStream(fout, new Adler32());

    ZipOutputStream zout = new ZipOutputStream(checksum);

    FileInputStream fin = new FileInputStream(SOURCE_FILE);

    ZipEntry zipEntry = new ZipEntry(SOURCE_FILE);

    zout.putNextEntry(zipEntry);

    int length;

    byte[] buffer = new byte[1024];

    while((length = fin.read(buffer)) > 0) {

    zout.write(buffer, 0, length);

    }

    zout.closeEntry();

    fin.close();

    zout.close();

    }

    private static void readZipFile() throws IOException{

    ZipInputStream zin = new ZipInputStream(new FileInputStream(TARGET_FILE));

    ZipEntry entry;

    while((entry = zin.getNextEntry())!=null){

    System.out.printf("File: %s Modified on %TD %n",

    entry.getName(), new Date(entry.getTime()));

    extractFile(entry, zin);

    System.out.printf("Zip file %s extracted successfully.", SOURCE_FILE);

    zin.closeEntry();

    }

    zin.close();

    }

    private static void extractFile(final ZipEntry entry, ZipInputStream is)

    throws IOException {

    FileOutputStream fos = null;

    try {

    fos = new FileOutputStream(entry.getName());

    while(is.available() != 0){

    fos.write(is.read());

    }

    } catch (IOException ioex) {

    fos.close();

    }

    }

    }

    让我们编译并运行上面的程序,这将产生以下结果 -File: D:\test\Hello.txt Modified on 05/22/17

    Zip file D:\test\Hello.txt extracted successfully.

    展开全文
  • 这几天在做通过流下载zip文件以及上传zip文件不解压读取zip文件内容的功能,在读取zip文件内容的时候遇到了size为-1的情况,在此记录下遇到的情况、解决办法、以及未解决的问题。 示例 将上传和下载zip文件的...

     

    简介

    这几天在做通过流下载zip文件以及上传zip文件不解压读取zip文件内容的功能,在读取zip文件内容的时候遇到了size为-1的情况,在此记录下遇到的情况、解决办法、以及未解决的问题。

    示例

    将上传和下载zip文件的功能做成了一个示例,放到了github上,链接:export-import-zip-use-stream,可以尝试运行下。

    遇到的问题

    通过流下载zip文件之后,再次导入该zip文件,不解压读取zip文件内容,发现ZipEntry的size()返回-1,如下图所示:

     

    但是尝试使用系统自带的压缩软件压缩了一个zip文件,并上传读取,发现一切正常,size不为-1。使用zipinfo命令查看两个文件作为对比,如下:

     

    可以看到上面文件是通过导出功能生成的,红框里缺少size。而下面的是系统压缩软件压缩的zip文件,红框里面带有size大小。故猜测可能是由于代码里生成ZipEntry的时候没有设置size,compressize,crc32等属性的原因。

    读取zip文件时ZipEntry的size为-1解决办法

    直接读取当前ZipEntry的流,直到为-1为止,代码如下:

    @PostMapping("import")
    @ResponseBody
    public void importZip(@RequestParam("file")MultipartFile file) throws IOException {
    
        ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream());
    
        ZipEntry zipEntry;
        while ((zipEntry = zipInputStream.getNextEntry()) != null) {
            if (zipEntry.isDirectory()) {
                // do nothing
            }else {
                String name = zipEntry.getName();
                long size = zipEntry.getSize();
                // unknown size
                // ZipEntry的size可能为-1,表示未知
                // 通过上面的几种方式下载,就会产生这种情况
                if (size == -1) {
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    while (true) {
                        int bytes = zipInputStream.read();
                        if (bytes == -1) break;
                        baos.write(bytes);
                    }
                    baos.close();
                    System.out.println(String.format("Name:%s,Content:%s",name,new String(baos.toByteArray())));
                } else { // ZipEntry的size正常
                    byte[] bytes = new byte[(int) zipEntry.getSize()];
                    zipInputStream.read(bytes, 0, (int) zipEntry.getSize());
                    System.out.println(String.format("Name:%s,Content:%s",name,new String(bytes)));
                }
            }
    
        }
        zipInputStream.closeEntry();
        zipInputStream.close();
    }
    

     

    此时可以正确读取文件内容。

    下载文件时设置size的解决办法

    需要设置ZipEntry的size,compresSize以及crc32等属性。

    例如:

    public static void main(String[] args) throws IOException {
        File infile  = new File("test_file.pdf");
        File outfile = new File("test.zip");
        try (FileInputStream  fis = new FileInputStream(infile);
             FileOutputStream fos = new FileOutputStream(outfile);
             ZipOutputStream  zos = new ZipOutputStream(fos) ) {
    
            byte[]  buffer = new byte[1024];
            ZipEntry entry = new ZipEntry("data");
            precalc(entry, fis.getChannel());
            zos.putNextEntry(entry);
            for(int bytesRead; (bytesRead = fis.read(buffer)) >= 0; )
                zos.write(buffer, 0, bytesRead);
            zos.closeEntry();
        }
    
        try(FileInputStream fin = new FileInputStream(outfile);
            ZipInputStream  zis = new ZipInputStream(fin) ) {
    
            ZipEntry entry = zis.getNextEntry();
            System.out.println("Entry size: " + entry.getSize());
            System.out.println("Compressed size: " + entry.getCompressedSize());
            System.out.println("CRC: " + entry.getCrc());
            zis.closeEntry();
        }
    }
    
    private static void precalc(ZipEntry entry, FileChannel fch) throws IOException {
        long uncompressed = fch.size();
        int method = entry.getMethod();
        CRC32 crc = new CRC32();
        Deflater def;
        byte[] drain;
        if(method != ZipEntry.STORED) {
            def   = new Deflater(Deflater.DEFAULT_COMPRESSION, true);
            drain = new byte[1024];
        }
        else {
            def   = null;
            drain = null;
        }
        ByteBuffer buf = ByteBuffer.allocate((int)Math.min(uncompressed, 4096));
        for(int bytesRead; (bytesRead = fch.read(buf)) != -1; buf.clear()) {
            crc.update(buf.array(), buf.arrayOffset(), bytesRead);
            if(def!=null) {
                def.setInput(buf.array(), buf.arrayOffset(), bytesRead);
                while(!def.needsInput()) def.deflate(drain, 0, drain.length);
            }
        }
        entry.setSize(uncompressed);
        if(def!=null) {
            def.finish();
            while(!def.finished()) def.deflate(drain, 0, drain.length);
            entry.setCompressedSize(def.getBytesWritten());
        }
        entry.setCrc(crc.getValue());
        fch.position(0);
    }

     

    另外一种解决方法,通过Enumeration 

    一、分析下原因

    (PS:参考大佬的博客地址:https://blog.csdn.net/zbj18314469395/article/details/84109499)

    二、解决办法:

    把判断条件由【(ze=zin.getNextEntry())!=null】换成【zipEnum.hasMoreElements ()】
    使用了枚举, Enumeration 接口(枚举)。

    通常用 Enumeration 中的以下两个方法打印向量中的所有元素:

    (1) boolean hasMoreElements(); // 是否还有元素,如果返回 true ,则表示至少含有一个元素

    (2) public Object nextElement(); // 如果 Enumeration 枚举对象还含有元素,该方法返回对象中的下一个元素。如果没有,则抛出NoSuchElementException 异常。

    附上我的代码,已经修改过的,大家可以参考一下

    public void processFile(String path) throws Exception {
            ZipFile zf = new ZipFile(path);
            //主要是这块
            java.util.Enumeration zipEnum = zf.entries();
            InputStream in = new BufferedInputStream(new FileInputStream(path));
            ZipInputStream zin = new ZipInputStream(in, Charset.forName("gbk"));
            ZipEntry ze;
            //重点是是这块的判断
            while (zipEnum.hasMoreElements()) {
                ze = (ZipEntry) zipEnum.nextElement();
                if (!ze.getName().contains("__MACOSX") && !ze.getName().contains(".DS_Store")) {
                    if (!ze.isDirectory()) {
                        System.out.println("##name##" + ze.getName());
                        System.out.println("##size##" + ze.getSize());
                    }
                }
            }
            zin.closeEntry();
        }

     

    另外一个例子:

    https://github.com/yrom/shrinker/blob/master/shrinker/src/main/java/net/yrom/tools/JarProcessor.java

    package net.yrom.tools;
       import com.google.common.collect.ImmutableList;
            import org.apache.commons.io.IOUtils;
            import org.apache.commons.io.output.ByteArrayOutputStream;
            import java.io.ByteArrayInputStream;
            import java.io.EOFException;
            import java.io.IOException;
            import java.io.OutputStream;
            import java.io.UncheckedIOException;
            import java.nio.file.Files;
            import java.nio.file.Path;
            import java.util.List;
            import java.util.function.Function;
            import java.util.stream.Collectors;
            import java.util.zip.CRC32;
            import java.util.zip.ZipEntry;
            import java.util.zip.ZipInputStream;
            import java.util.zip.ZipOutputStream;
    /**
     * @author yrom
     * @version 2017/11/29
     */
    class JarProcessor extends ClassesProcessor {
        JarProcessor(Function<byte[], byte[]> classTransform, Path src, Path dst) {
            super(classTransform, src, dst);
        }
        @Override
        public void proceed() {
            try {
                List<Pair<String, byte[]>> entryList = readZipEntries(src)
                        .parallelStream()
                        .map(this::transformClassBlob)
                        .collect(Collectors.toList());
                if (entryList.isEmpty()) return;
                try (OutputStream fileOut = Files.newOutputStream(dst)) {
                    ByteArrayOutputStream buffer = zipEntries(entryList);
                    buffer.writeTo(fileOut);
                }
            } catch (IOException e) {
                throw new RuntimeException("Reading jar entries failure", e);
            }
        }
        private ByteArrayOutputStream zipEntries(List<Pair<String, byte[]>> entryList) throws IOException {
            ByteArrayOutputStream buffer = new ByteArrayOutputStream(8192);
            try (ZipOutputStream jar = new ZipOutputStream(buffer)) {
                jar.setMethod(ZipOutputStream.STORED);
                final CRC32 crc = new CRC32();
                for (Pair<String, byte[]> entry : entryList) {
                    byte[] bytes = entry.second;
                    final ZipEntry newEntry = new ZipEntry(entry.first);
                    newEntry.setMethod(ZipEntry.STORED); // chose STORED method
                    crc.reset();
                    crc.update(entry.second);
                    newEntry.setCrc(crc.getValue());
                    newEntry.setSize(bytes.length);
                    writeEntryToJar(newEntry, bytes, jar);
                }
                jar.flush();
            }
            return buffer;
        }
        private Pair<String, byte[]> transformClassBlob(Pair<String, byte[]> entry) {
            byte[] bytes = entry.second;
            entry.second = classTransform.apply(bytes);
            return entry;
        }
        private List<Pair<String, byte[]>> readZipEntries(Path src) throws IOException {
            ImmutableList.Builder<Pair<String, byte[]>> list = ImmutableList.builder();
            try (ZipInputStream zip = new ZipInputStream(new ByteArrayInputStream(Files.readAllBytes(src)))) {
                for (ZipEntry entry = zip.getNextEntry();
                     entry != null;
                     entry = zip.getNextEntry()) {
                    String name = entry.getName();
                    if (!name.endsWith(".class")) {
    // skip
                        continue;
                    }
                    long entrySize = entry.getSize();
                    if (entrySize >= Integer.MAX_VALUE) {
                        throw new OutOfMemoryError("Too large class file " + name + ", size is " + entrySize);
                    }
                    byte[] bytes = readByteArray(zip, (int) entrySize);
                    list.add(Pair.of(name, bytes));
                }
            }
            return list.build();
        }
        private byte[] readByteArray(ZipInputStream zip, int expected) throws IOException {
            if (expected == -1) { // unknown size
                return IOUtils.toByteArray(zip);
            }
            final byte[] bytes = new byte[expected];
            int read = 0;
            do {
                int n = zip.read(bytes, read, expected - read);
                if (n <= 0) {
                    break;
                }
                read += n;
            } while (read < expected);
            if (expected != bytes.length) {
                throw new EOFException("unexpected EOF");
            }
            return bytes;
        }
        private static void writeEntryToJar(ZipEntry entry, byte[] bytes, ZipOutputStream jar) {
            try {
                jar.putNextEntry(entry);
                jar.write(bytes);
                jar.closeEntry();
            } catch (IOException e) {
                throw new UncheckedIOException(e);
            }
        }
        // mutable pair
        static class Pair<F, S> {
            F first;
            S second;
            Pair(F first, S second) {
                this.first = first;
                this.second = second;
            }
            static <F, S> Pair<F, S> of(F first, S second) {
                return new Pair<>(first, second);
            }
        }
    }

     

    zip例子:

    https://www.programcreek.com/java-api-examples/?code=FutureSonic/FutureSonic-Server/FutureSonic-Server-master/futuresonic-main/src/main/java/net/sourceforge/subsonic/controller/DownloadController.java

     

    /**
         * Computes the CRC checksum for the given file.
         *
         * @param file The file to compute checksum for.
         * @return A CRC32 checksum.
         * @throws IOException If an I/O error occurs.
         */
        private static long computeCrc(File file) throws IOException {
            CRC32 crc = new CRC32();
            InputStream in = new FileInputStream(file);
    
            try {
    
                byte[] buf = new byte[8192];
                int n = in.read(buf);
                while (n != -1) {
                    crc.update(buf, 0, n);
                    n = in.read(buf);
                }
    
            } finally {
                in.close();
            }
    
            return crc.getValue();
        }
    
    
        private static void copyFileToStream(File file, OutputStream out) throws IOException {
            //LOG.info("Downloading '" + FileUtil.getShortPath(file) + "' to " + status.getPlayer());
    
            final int bufferSize = 16 * 1024; // 16 Kbit
            InputStream in = new BufferedInputStream(new FileInputStream(file), bufferSize);
    
            try {
                byte[] buf = new byte[bufferSize];
                long bitrateLimit = 0;
                long lastLimitCheck = 0;
    
                while (true) {
                    long before = System.currentTimeMillis();
                    int n = in.read(buf);
                    if (n == -1) {
                        break;
                    }
                    out.write(buf, 0, n);
                }
            } finally {
                out.flush();
                in.close();
            }
        }
    
    
        private static void zip(ZipOutputStream out, String root, File file) throws IOException {
    
            // Exclude all hidden files starting with a "."
            if (file.getName().startsWith(".")) {
                return;
            }
    
            String zipName = file.getCanonicalPath().substring(root.length() + 1);
            if (file.isFile()) {
                ZipEntry zipEntry = new ZipEntry(zipName);
                zipEntry.setSize(file.length());
                zipEntry.setCompressedSize(file.length());
                zipEntry.setCrc(computeCrc(file));
    
                out.putNextEntry(zipEntry);
                copyFileToStream(file, out);
                out.closeEntry();
            } else {
                ZipEntry zipEntry = new ZipEntry(zipName + '/');
                zipEntry.setSize(0);
                zipEntry.setCompressedSize(0);
                zipEntry.setCrc(0);
    
                out.putNextEntry(zipEntry);
                out.closeEntry();
    
                File[] children = file.listFiles(); //FileUtil.listFiles(file);
                for (File child : children) {
                    zip(out, root, child);
                }
            }
        }
    
        public static void zipDir(String zipFileName, String dir) {
            try {
                File zipFile = new File(zipFileName);
                FileOutputStream fos = new FileOutputStream(zipFile);
    
                //ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos));
                CheckedOutputStream checksum = new CheckedOutputStream(fos, new CRC32());
                ZipOutputStream zos = new ZipOutputStream(checksum);
    
                File dirFile = new File(dir);
                String root = zipFile.getCanonicalPath().substring(0, zipFile.getCanonicalPath().length() - zipFile.getName().length() - 1);
                zip(zos, root, dirFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    但是上面的zip方法,压缩zip后,用Zip4J解压会失败,文件也有问题。这个后面来研究。

     

    转自:

    http://cxis.me/2018/03/03/%E4%B8%8A%E4%BC%A0Zip%E6%96%87%E4%BB%B6%E4%B8%8D%E8%A7%A3%E5%8E%8B%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E6%97%B6ZipEntry%E7%9A%84size%E4%B8%BA-1%E7%9A%84%E9%97%AE%E9%A2%98/

     

    展开全文
  • 项目中碰到问题.jdk zipEntry 压缩中文文件名乱码  上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.  第二种 就是拿来主义,因为 开源项目 Ant 里已经有...
  • 我正在使用ZipOutputStream压缩一堆文件,这些文件是已压缩格式的混合,以及许多大型高度可压缩格式,如...当我检测到预压缩文件时,我试图使用.setMethod(ZipEntry.STORED),但它抱怨我需要提供这些文件的大小,compress...
  • zip 的ZipEntry转换为InputStream

    千次阅读 2020-09-25 10:53:19
    在有些时候我们需要将zip包下的某个entry转换为inputstream流方便处理。 贴下代码, /** * 解压zip获取zip下的某个文件流 * @param in zip对应的输入流 * @param fileName zip下某个文件名 * @return zip下文件...
  • Failed to read zip entry source

    千次阅读 2021-02-25 10:22:47
    java.io.IOException: Failed to read zip entry source at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:103) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324)...
  • I have the following code that writes a text file in a zip:FileOutputStream fOut = new FileOutputStream(fullFilename, false);BufferedOutputStream bOut = new BufferedOutputStream(fOut);ZipOutputStream ...
  • 该函数将特定ZipEntry的Comment设置为指定的字符串。注释的最大长度为0xffff,如果字符串的长度大于0xffff,则将考虑前0xffff个字符。函数签名:public void setComment(String s)用法:zip_entry.setComment(s);参数...
  • 使用ZipEntry解压zip文件报错: java.lang.IllegalArgumentException: MALFORMED 分析 压缩文件中含有中文, 在ZipCoder调用toString函数报错。此处识别成了utf8, 所以 在解压时设置成gbk字符集就行了 String ...
  • java.io.IOException: Failed to read zip entry source at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:103) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324)...
  • ZipEntry 类,zip的压缩与解压

    万次阅读 2019-07-18 18:33:49
    ZipEntry 类是java.util.zip包下的一个类, ZipEntry 类用于表示 ZIP 文件条目。 利用这个类压缩和解压zip文件 具体压缩的例子如下: import java.io.File; import java.io.FileInputStream; import java.io....
  • setCrc()函数是java.util.zip...函数签名:public void setCrc(long val)用法:zip_entry.setCrc(val);参数:该函数取一个long值,代表CRC值返回值:该函数不返回任何值。Exceptions:如果指定的CRC-32值小于0或大...
  • zipEntry.getSize()=-1

    2021-05-25 18:31:05
    拿到zipInputStream之后,zipEntry=zipInputStream.getNextEntry(); zipEntry.getSize()=-1 zipEntry.getExtra()=null 这样就拿不到文件数据流 2、解决方案 查看ZipInputStream的官方文档 getNextEntry() ,...
  • ZipEntry的使用

    万次阅读 2019-03-23 11:13:18
    Java中的Java.util.zip.ZipEntry类用于表示ZIP文件条目。 从一个zip文件获取zipEntry的方法是: private ZipEntry[] getZipEntries2( String file ) throws IOException { ZipInputStream zipStream = null; ...
  • 该函数返回特定ZipEntry的CRC-32校验和值。 CRC是用于检测原始数据中的错误的错误检测代码。函数签名:public long getCrc()用法:zip_entry.getCrc();参数:此功能不需要任何参数。返回值:该函数返回一个long值,即...
  • 文章目录Caused by: java.io.IOException: ZIP entry size is too large1、Java 使用POI对excel进行读写时,碰到如下问题2、问题的解决方法 Caused by: java.io.IOException: ZIP entry size is too large 1、Java ...
  • 该函数返回作为参数传递的特定ZipEntry的未压缩大小,如果未知则返回-1。函数签名:public long getSize()用法:zip_entry.getSize();参数:此功能不需要任何参数。返回值:该函数返回一个long值,即此ZipEntry的未...
  • Enumeration extends ZipEntry> entries()描述 (Description)java.util.zip.ZipFile.entries()方法返回ZIP文件条目的枚举。声明 (Declaration)以下是java.util.zip.ZipFile.entries()方法的声明。public ...
  • 今天在项目中遇到一个问题,有一个需求是需要验证下载的ZIP文件,解压读取ZIP文件夹内部的文件,文件名称以及大小。 网上搜了下,发现,不用解压可以直接读取,代码如下: package com.sd.test.readzip; import ...
  • 展开全部ZipEntry 用于保存一些被压缩文件的信息,32313133353236313431303231363533e78988e69d8331333365643635如文件名,最后访问时间,最后修改时间,创建时间,文件大小,crc 校验值 等信息。ZipEntry 具有一个...
  • 以下为示例代码,纯手写,主要为协助讲清楚解决办法 public String batchFileUpload(@RequestParam("file") MultipartFile file) { String zipFileName = file.... if (contType.toLowerCase().indexOf("zip")
  • //解决linux乱码 如果压缩的是文件需要 ZipEntry 设置 zipEntry.setUnixMode(777),此处应该设置的是文件权限问题 相当于 linux中 chmod 777 aaa.txt 我将权限设置成了777 之前设置的644下载后的文件,用户没有...
  • java.util.zip.ZipEntry.getSize()方法条目数据的未压缩大小,如果未知,则为-1。声明以下是java.util.zip.ZipEntry.getSize()方法的声明。public long getSize()返回值条目数据的未压缩大小,如果未知,则为-1。...
  • Duplicate zip entry [classes.jar:android/support/design/widget/CoordinatorLayout$Behavior.class] 排查问题 通过截图可以看到是因为CoordinatorLayout重复的问题,接下来就是排查问题的思路 1.全局搜索“Class...
  • poi导出报IOException异常,错误提示Failed to read zip entry source 问题:poi读取excel模板配置,按模板格式导出excel,读取excel模板时,报以上错误。 原因:excel模板在项目打包编译时,xlsx文件解压缩时出...
  • 代码如下: ZipOutputStream zipOut = new ZipOutputStream... ZipEntry zipEntry = new ZipEntry(value.get("fileName")); 代码本身是没有问题的,在使用zipEntry时出现文件名是中文时的乱码不...
  • 项目中碰到问题.jdk zipEntry 压缩中文文件名乱码  上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.  第二种 就是拿来主义,因为 开源项目 Ant 里已经有现成...
  • 使用ZipEntry压缩与解压缩

    万次阅读 2017-01-05 15:46:11
    Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries(); // 循环对压缩包里的每一个文件进行解压 while (entries.hasMoreElements()) { entry = entries.nextElement(); if (entry....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,311
精华内容 20,124
关键字:

zipentry