精华内容
下载资源
问答
  • 在多个文件导出的时候,我们常常会将多文件压缩之后导出zip文件到页面。下面直接上代码。 @ApiOperation(value = "导出模板文件") @GetMapping("exportTemplate") public void exportTemplate(HttpServletRequest...

    多文件压缩zip导出到浏览器页面

    在多个文件导出的时候,我们常常会将多文件压缩之后导出zip文件到页面。下面直接上代码。

        @ApiOperation(value = "导出模板文件")
    	@GetMapping("exportTemplate")
    	public void exportTemplate(HttpServletRequest request, HttpServletResponse response) {
    		try {
    			// 设置文件编码及相应消息头,防止中文乱码
    			String userAgent = request.getHeader("user-agent").toLowerCase();
    			String exportFileName = "科研课题导入模板";
    			if (userAgent.contains("msie") || userAgent.contains("like gecko"))
    			{
    				// win10 ie edge 浏览器 和其他系统的ie
    				exportFileName = URLEncoder.encode(exportFileName, "UTF-8");
    			} else
    			{
    				exportFileName = new String(exportFileName.getBytes("UTF-8"), "ISO-8859-1");
    			}
    			response.setCharacterEncoding("UTF-8");
    			response.setContentType("multipart/form-data");
    			response.setHeader("content-disposition", "attachment;filename=" + exportFileName + ".zip");
    			获取系统文件
    			List<File> srcFiles = new LinkedList<File>();
    			
    			File file = new File( "e:/a.xlsx");
    			File fileGc = new File( "e:/课题A_过程.docx");
    			File fileJt = new File("e:/课题A_结题.docx");
    			File fileKt = new File("e:/课题A_开题.docx");
    			srcFiles.add(file);
    			srcFiles.add(fileGc);
    			srcFiles.add(fileJt);
    			srcFiles.add(fileKt);
    			
    			ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
    	        try {
    	        	for (int i = 0; i < srcFiles.size(); i++)
    				{
    	        		File srcFile = srcFiles.get(i);
    	        		byte[] buf = new byte[1024];
    					out.putNextEntry(new ZipEntry(srcFile.getName()));
    				    int len;
    	                FileInputStream in = new FileInputStream(srcFiles.get(i));
    	                while ((len = in.read(buf)) != -1) {
    	                	out.write(buf, 0, len);
    	                	out.flush();
    	                }
    	                in.close();
    	                out.closeEntry();
    				}
    	            out.close();
    	        } catch (Exception e) {
    	            throw new RuntimeException("zipFile error from ZipUtils", e);
    	        }finally {
    	        	if (out != null) {
    	                try {
    	                	out.close();
    	                } catch (IOException e) {
    	                    System.out.println("ZipUtil toZip close exception" + e);
    	                }
    	            }
    			}
    		} catch (Exception e) {
    			logger.error(e.getMessage(), e);
    		}
    	}
    

    读取系统zip文件(解压)

    在一次需要导入多个文件的时候,往往我们会将多文件压缩为一个zip文件,然后在后台再解压zip文件,读取文件内容,下面我将java读取zip文件的方法代码贴上,最近项目用的。亲测可用。

    	/**
         * 解压文件
         * @param zipPath 要解压的目标文件
         * @param descDir 指定解压目录
         */
     public static void decompressZip(String zipPath, String descDir) {
            File zipFile = new File(zipPath);
           
            ZipFile zip = null;
            InputStream in = null;
            OutputStream out = null;
            try {
                zip = new ZipFile(zipFile, Charset.forName("gbk"));//防止中文目录,乱码
                for(Enumeration entries = zip.entries(); entries.hasMoreElements();){
                    ZipEntry entry = (ZipEntry)entries.nextElement();
                    String zipEntryName = entry.getName();
                    in = zip.getInputStream(entry);
                    //指定解压后的文件夹+当前zip文件的名称
                    String outPath = (descDir+zipEntryName).replace("/", File.separator);
                    //判断路径是否存在,不存在则创建文件路径
                    File file = new File(outPath.substring(0, outPath.lastIndexOf(File.separator)));
                    if(!file.exists()){
                        file.mkdirs();
                    }
                    //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
                    if(new File(outPath).isDirectory()){
                        continue;
                    }
                    //保存文件路径信息(可利用md5.zip名称的唯一性,来判断是否已经解压)
     
                    out = new FileOutputStream(outPath);
                    byte[] buf1 = new byte[2048];
                    int len;
                    while((len=in.read(buf1))>0){
                        out.write(buf1,0,len);
                    }
                    in.close();
                    out.close();
                }
                //必须关闭,要不然这个zip文件一直被占用着,要删删不掉,改名也不可以,移动也不行,整多了,系统还崩了。
                zip.close();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(zip != null){
                    try {
                    	zip.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }  
                zipFile.delete(); 
            }
        }
    

    希望对大家有帮助,如其他童鞋有疑问,欢迎留言

    展开全文
  • Java操作Zip压缩文件遇到的编码问题

    千次阅读 2017-12-10 11:32:24
    1、遇到的问题:在for循环操作zip文件(文件名包含中文)的过程中,报错如下: Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(ZipCoder...

    1、遇到的问题:在for循环操作zip文件(文件名包含中文)的过程中,报错如下:   

    Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED
    at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
    at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:297)
    at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:121)
    at com.forestfood.FileUntils.done(FileUntils.java:224)
    at com.forestfood.FileUntils.getActionZipFiles(FileUntils.java:196)
    at com.forestfood.FileUntils.main(FileUntils.java:24)

    2、查找原因:追查报错代码行至  ZipCoder.java:58

      

    final class ZipCoder {
        String toString(byte[] ba, int length) {
            CharsetDecoder cd = decoder().reset();
            int len = (int)(length * cd.maxCharsPerByte());
            char[] ca = new char[len];
            if (len == 0)
                return new String(ca);
            // UTF-8 only for now. Other ArrayDeocder only handles// CodingErrorAction.REPLACE mode. ZipCoder uses// REPORT mode.if (isUTF8 && cd instanceof ArrayDecoder) {
                int clen = ((ArrayDecoder)cd).decode(ba, 0, length, ca);
                if (clen == -1)    // malformedthrow new IllegalArgumentException("MALFORMED");
                return new String(ca, 0, clen);
            }

    可以发现,如果不指定编码的时候,默认是UTF-8,在解码的时候就会发生错误。

    3、解决方法:在创建zip的时候,指定编码

    FileInputStream fileInputStream = new FileInputStream(zipPath);
    Charset gbk = Charset.forName("gbk");
    ZipInputStream zin = new ZipInputStream(fileInputStream,gbk);
    ZipEntry entry = zin.getNextEntry();
    展开全文
  • 今天在项目中需要使用到了zip解压技术,用于解压压缩包,从而获取其中的文件进行操作,但其中涉及到中文编码,和io流的问题需要注意。 问题分析: 1.编码问题 由于zip解压缩文件会产生编码问题,如中文,不解决的...

    问题现象:

    今天在项目中需要使用到了zip解压技术,用于解压压缩包,从而获取其中的文件进行操作,但其中涉及到中文编码,和io流的问题需要注意。


    问题分析:

    1.编码问题

    由于zip解压缩文件会产生编码问题,如中文,不解决的话就会出现乱码现象;可以通过 new ZipFile(srcFile,Charset.forName("字符编码规则"));

    2.IO流

    zip解压缩文件的时候,涉及到文件io流(输入输出流)的问题,因此需要注意流的关闭问题。


    解决方法:

    分享一下我的工具类,开箱即用:

    zip压缩包解压工具(ZipFIleUtil):

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.nio.charset.Charset;
    import java.util.Enumeration;
    import java.util.LinkedHashMap;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    
    /**
     * zip压缩包解压工具
     * 提供以下方法:
     * 1. getZipInnerFileList(File srcFile):获取zip压缩包内部文件的名称和文件类型
     * 2. unZip(File srcFile, String destDirPath):解压zip包
     *
     * @author Stephen
     * @version 2021.03.30
     */
    public class ZipFIleUtil {
    
    	/**
    	 * 获取zip压缩包内部文件的名称和文件类型
    	 *
    	 * @param srcFile
    	 * @return
    	 * @throws RuntimeException
    	 */
    	public static LinkedHashMap<String, String> getZipInnerFileList(File srcFile) throws RuntimeException {
    		// 判断源文件是否存在
    		if ( !srcFile.exists() ) {
    			throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
    		}
    		// 开始解压
    		ZipFile zipFile = null;
    		try {
    			LinkedHashMap<String, String> unZipFileList = new LinkedHashMap<String, String>();
    			zipFile = new ZipFile(srcFile, Charset.forName(CharsetConvertUtil.getEncode(srcFile.getAbsolutePath(), true)));
    			System.out.println("zip压缩包 【" + srcFile.getName() + "】 中包含以下文件:");
    			Enumeration<?> entries = zipFile.entries();
    			String lastDirectory = null;
    			while (entries.hasMoreElements()) {
    				ZipEntry entry = (ZipEntry)entries.nextElement();
    				String filePath = entry.getName();
    				if ( filePath.contains("/") ) {
    					String directory = filePath.substring(0, filePath.lastIndexOf("/"));
    					if ( !directory.equals(lastDirectory) ) {
    						lastDirectory = directory;
    						unZipFileList.put(directory, "文件夹");
    					}
    				}
    				String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
    				String fileType = filePath.substring(filePath.lastIndexOf(".") + 1);
    				System.out.println("文件类型:" + fileType);
    				System.out.println("文件名:" + fileName);
    				unZipFileList.put(fileName, fileType);
    			}
    			zipFile.close();
    			if ( unZipFileList.size() > 0 ) {
    				return unZipFileList;
    			} else {return null;}
    		} catch (Exception e) {
    			throw new RuntimeException("获取zip压缩包内部文件信息失败!", e);
    		}
    	}
    
    	/**
    	 * 解压zip包
    	 *
    	 * @param srcFile
    	 * @param destDirPath
    	 * @throws RuntimeException
    	 */
    	public static void unZip(File srcFile, String destDirPath) throws RuntimeException {
    		long start = System.currentTimeMillis();
    		// 判断源文件是否存在
    		if ( !srcFile.exists() ) {
    			throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
    		}
    
    		// 开始解压
    		ZipFile zipFile = null;
    		try {
    			zipFile = new ZipFile(srcFile, Charset.forName(CharsetConvertUtil.getEncode(srcFile.getAbsolutePath(), true)));
    			Enumeration<?> entries = zipFile.entries();
    			while (entries.hasMoreElements()) {
    				ZipEntry entry = (ZipEntry)entries.nextElement();
    				System.out.println("解压" + entry.getName());
    				// 如果是文件夹,就创建个文件夹
    				if ( entry.isDirectory() ) {
    					String dirPath = destDirPath + "/" + entry.getName();
    					File dir = new File(dirPath);
    					dir.mkdirs();
    				} else {
    					// 如果是文件,就先创建一个文件,然后用io流把内容copy过去
    					File targetFile = new File(destDirPath + "/" + entry.getName());
    					// 保证这个文件的父文件夹必须要存在
    					if ( !targetFile.getParentFile().exists() ) {
    						targetFile.getParentFile().mkdirs();
    					}
    					targetFile.createNewFile();
    					// 将压缩文件内容写入到这个文件中
    					InputStream is = zipFile.getInputStream(entry);
    					FileOutputStream fos = new FileOutputStream(targetFile);
    					int len;
    					byte[] buf = new byte[1024];
    					while ((len = is.read(buf)) != -1) {
    						fos.write(buf, 0, len);
    					}
    					// 关流顺序,先打开的后关闭
    					fos.close();
    					is.close();
    				}
    			}
    			long end = System.currentTimeMillis();
    			System.out.println("解压完成,耗时:" + (end - start) + " ms");
    			zipFile.close();
    		} catch (Exception e) {
    			throw new RuntimeException("unzip error from ZipUtils", e);
    		}
    	}
    }

    字符编码转换工具类(CharsetConvertUtil ):

    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.BitSet;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * 字符编码转换工具类
     * 自动识别文件编码格式
     */
    public class CharsetConvertUtil {
    	private static Logger logger = LoggerFactory.getLogger(CharsetConvertUtil.class);
    
    	private static int BYTE_SIZE = 8;
    	public static String CODE_UTF8 = "UTF-8";
    	public static String CODE_UTF8_BOM = "UTF-8_BOM";
    	public static String CODE_GBK = "GBK";
    
    	/**
    	 * 通过文件全名称获取编码集名称
    	 *
    	 * @param fullFileName
    	 * @param ignoreBom
    	 * @return
    	 * @throws Exception
    	 */
    	public static String getEncode(String fullFileName, boolean ignoreBom) throws Exception {
    		logger.debug("fullFileName ; {}", fullFileName);
    		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fullFileName));
    		return getEncode(bis, ignoreBom);
    	}
    
    	/**
    	 * 通过文件缓存流获取编码集名称,文件流必须为未曾
    	 *
    	 * @param bis
    	 * @param ignoreBom 是否忽略utf-8 bom
    	 * @return
    	 * @throws Exception
    	 */
    	public static String getEncode(BufferedInputStream bis, boolean ignoreBom) throws Exception {
    		bis.mark(0);
    
    		String encodeType = "未识别";
    		byte[] head = new byte[3];
    		bis.read(head);
    		if ( head[0] == -1 && head[1] == -2 ) {
    			encodeType = "UTF-16";
    		} else if ( head[0] == -2 && head[1] == -1 ) {
    			encodeType = "Unicode";
    		} else if ( head[0] == -17 && head[1] == -69 && head[2] == -65 ) { //带BOM
    			if ( ignoreBom ) {
    				encodeType = CODE_UTF8;
    			} else {
    				encodeType = CODE_UTF8_BOM;
    			}
    		} else if ( "Unicode".equals(encodeType) ) {
    			encodeType = "UTF-16";
    		} else if ( isUTF8(bis) ) {
    			encodeType = CODE_UTF8;
    		} else {
    			encodeType = CODE_GBK;
    		}
    		logger.info("result encode type : " + encodeType);
    		return encodeType;
    	}
    
    	/**
    	 * 是否是无BOM的UTF8格式,不判断常规场景,只区分无BOM UTF8和GBK
    	 *
    	 * @param bis
    	 * @return
    	 */
    	private static boolean isUTF8(BufferedInputStream bis) throws Exception {
    		bis.reset();
    
    		//读取第一个字节
    		int code = bis.read();
    		do {
    			BitSet bitSet = convert2BitSet(code);
    			//判断是否为单字节
    			if ( bitSet.get(0) ) {//多字节时,再读取N个字节
    				if ( !checkMultiByte(bis, bitSet) ) {//未检测通过,直接返回
    					return false;
    				}
    			} else {
    				//单字节时什么都不用做,再次读取字节
    			}
    			code = bis.read();
    		} while (code != -1);
    		return true;
    	}
    
    	/**
    	 * 检测多字节,判断是否为utf8,已经读取了一个字节
    	 *
    	 * @param bis
    	 * @param bitSet
    	 * @return
    	 */
    	private static boolean checkMultiByte(BufferedInputStream bis, BitSet bitSet) throws Exception {
    		int count = getCountOfSequential(bitSet);
    		byte[] bytes = new byte[count - 1];//已经读取了一个字节,不能再读取
    		bis.read(bytes);
    		for ( byte b : bytes ) {
    			if ( !checkUtf8Byte(b) ) {
    				return false;
    			}
    		}
    		return true;
    	}
    
    	/**
    	 * 检测单字节,判断是否为utf8
    	 *
    	 * @param b
    	 * @return
    	 */
    	private static boolean checkUtf8Byte(byte b) throws Exception {
    		BitSet bitSet = convert2BitSet(b);
    		return bitSet.get(0) && !bitSet.get(1);
    	}
    
    	/**
    	 * 检测bitSet中从开始有多少个连续的1
    	 *
    	 * @param bitSet
    	 * @return
    	 */
    	private static int getCountOfSequential(BitSet bitSet) {
    		int count = 0;
    		for ( int i = 0; i < BYTE_SIZE; i++ ) {
    			if ( bitSet.get(i) ) {
    				count++;
    			} else {
    				break;
    			}
    		}
    		return count;
    	}
    
    
    	/**
    	 * 将整形转为BitSet
    	 *
    	 * @param code
    	 * @return
    	 */
    	private static BitSet convert2BitSet(int code) {
    		BitSet bitSet = new BitSet(BYTE_SIZE);
    
    		for ( int i = 0; i < BYTE_SIZE; i++ ) {
    			int tmp3 = code >> (BYTE_SIZE - i - 1);
    			int tmp2 = 0x1 & tmp3;
    			if ( tmp2 == 1 ) {
    				bitSet.set(i);
    			}
    		}
    		return bitSet;
    	}
    
    	/**
    	 * 将一指定编码的文件转换为另一编码的文件
    	 *
    	 * @param oldFullFileName
    	 * @param oldCharsetName
    	 * @param newFullFileName
    	 * @param newCharsetName
    	 */
    	public static void convert(String oldFullFileName, String oldCharsetName, String newFullFileName, String newCharsetName) throws Exception {
    		logger.info("the old file name is : {}, The oldCharsetName is : {}", oldFullFileName, oldCharsetName);
    		logger.info("the new file name is : {}, The newCharsetName is : {}", newFullFileName, newCharsetName);
    
    		StringBuffer content = new StringBuffer();
    
    		BufferedReader bin = new BufferedReader(new InputStreamReader(new FileInputStream(oldFullFileName), oldCharsetName));
    		String line;
    		while ((line = bin.readLine()) != null) {
    			content.append(line);
    			content.append(System.getProperty("line.separator"));
    		}
    		newFullFileName = newFullFileName.replace("\\", "/");
    		File dir = new File(newFullFileName.substring(0, newFullFileName.lastIndexOf("/")));
    		if ( !dir.exists() ) {
    			dir.mkdirs();
    		}
    		Writer out = new OutputStreamWriter(new FileOutputStream(newFullFileName), newCharsetName);
    		out.write(content.toString());
    	}
    }

     

     

    展开全文
  • java 判断文件编码格式(支持zip)

    万次阅读 2018-02-02 22:20:34
    java 判断文件编码格式(支持zip) 前言: 最近在工作过程中遇到了这样的问题: 通过文件上传,需要导入zip包中的文件信息。 由于使用的是apache的ant.jar中的ZipFile类、ZipEntry类。由于目前该工具类并不能判断...

    java 判断文件编码格式(支持zip)

    前言:

        最近在工作过程中遇到了这样的问题: 通过文件上传,需要导入zip包中的文件信息。
    由于使用的是apache的ant.jar中的ZipFile类、ZipEntry类。由于目前该工具类并不能判断zip中每个文件的具体的编码,
    导致解析时出现中文乱码。通过查找资料发现借鉴使用第三方工具cpDetector解决。因此在此做个记录。
        若想实现更复杂的文件编码检测,可以使用一个开源项目cpdetector,
        网址: http://cpdetector.sourceforge.net
    它的类库很小,只有500K左右,cpDetector是基于统计学原理的,不保证完全正确,利用该类库判定文本文件的代码如下:
    

    准备条件

    - 需要的jar包:cpdetector_1.0.10.jar、antlr-2.7.4.jar、chardet-1.0.jar、jargs-1.0.jar
    - 源码:cpdetector_1.0.10_binary.zip
    - 相关资料:https://www.cnblogs.com/king1302217/p/4003060.html 
    

    具体实现

        在此摸索过程中遇到的问题:  查找了网上的参考例子,但是几乎所有的都是直接处理针对File对象的处理。
    没有针对zip文件的相关处理逻辑。并且由于apache的ZipFile 、 以及它内部的文件对象ZipEntry不能使用url方式。
    于是查看底层实现代码发现可以用此: 
        **charset = detector.detectCodepage(bis, Integer.MAX_VALUE);// zip 判断的关键代码**
    

    注意:
        直接使用zipFile.getInputStream(zipEntry) 得到的inputStream流不支持mark()方法。
        但是cpdetector底层需要用此方法.后来查找发现底层其实有类似场景的特殊处理:
        若是不支持mark()则可以把inputStream包装成支持的BufferedInputStream即可。如下:
    

    这里写图片描述

    具体代码如下:

    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.nio.charset.Charset;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import info.monitorenter.cpdetector.io.ASCIIDetector;
    import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
    import info.monitorenter.cpdetector.io.JChardetFacade;
    import info.monitorenter.cpdetector.io.ParsingDetector;
    import info.monitorenter.cpdetector.io.UnicodeDetector;
    /**
     * 1、cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法加进来,
     *    ParsingDetector、 JChardetFacade、ASCIIDetector、UnicodeDetector. 
     * 2、detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则. 
     * 3、cpDetector是基于统计学原理的,不保证完全正确.
     */
    public class FileCharsetDetector {
        private static final Logger logger = LoggerFactory.getLogger(FileCharsetDetector.class);
    
        /**
         * 利用第三方开源包cpdetector获取文件编码格式.
         * 
         * @param is
         *            InputStream 输入流
         * @return
         */
        public static String getFileEncode(InputStream is) {
            //    begin     此段为zip格式文件的处理关键
            BufferedInputStream bis = null;
            if (is instanceof BufferedInputStream) {
                bis = (BufferedInputStream) is;
            } else {
                bis = new BufferedInputStream(is);
            }
            //   end
    
            CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
    
            detector.add(new ParsingDetector(false));
            detector.add(UnicodeDetector.getInstance());
            detector.add(JChardetFacade.getInstance());// 内部引用了 chardet.jar的类
            detector.add(ASCIIDetector.getInstance());
    
            Charset charset = null;
            try {
                charset = detector.detectCodepage(bis, Integer.MAX_VALUE);// zip 判断的关键代码
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
                        logger.error(e.getMessage(), e);
                    }
                }
            }
    
            // 默认为GBK
            String charsetName = "GBK";
            if (charset != null) {
                if (charset.name().equals("US-ASCII")) {
                    charsetName = "ISO_8859_1";
                } else {
                    charsetName = charset.name();
                }
            }
            return charsetName;
        }
    
    
        public static String getFileEncode(File  file) {
            CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
    
            detector.add(new ParsingDetector(false));
            detector.add(UnicodeDetector.getInstance());
            detector.add(JChardetFacade.getInstance());
            detector.add(ASCIIDetector.getInstance());
    
            Charset charset = null;
            try {
                charset = detector.detectCodepage(file.toURI().toURL());
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            } 
    
            // 默认为GBK
            String charsetName = "GBK";
            if (charset != null) {
                if (charset.name().equals("US-ASCII")) {
                    charsetName = "ISO_8859_1";
                } else {
                    charsetName = charset.name();
                }
            }
            return charsetName;
        }
    
    }
    展开全文
  • 本工程用于研究如何使用Java代码获取文件文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891
  • 在做zip文件解压缩的时候碰到一个异常信息,见下面的异常详情: java.lang.IllegalArgumentException: MALFORMED[1] at java.util.zip.ZipCoder.toString(ZipCoder.java:65) ~[na:1.8.0_181] at java.util.zip....
  • java 解压zip文件

    2020-07-20 16:44:10
    --zip--> <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.7.0</version> </dependency> public static String unZip...
  • java 获取文件编码格式

    万次阅读 2017-11-07 14:23:28
    Java 自动检测文件编码: 用法很简单: import org.apache.commons.io.FileUtils; String filePath="D:/test.txt"; //获得文件编码 String fileEncode=EncodingDetect.getJavaEncode(filePath); //根据...
  • Java读取Zip文件和文件内容

    千次阅读 2017-08-09 14:12:14
    package test;...import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; impor
  • zip4j--Java操作zip压缩文件接口

    千次下载 热门讨论 2012-07-09 12:37:31
    Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件...(针对分块zip文件创建和抽出文件) Supports Unicode file names (支持Unicode编码文件名) Progress Monitor (进度监控)
  • 对于Java自身自带的压缩文件操作来说,最大的弊端应该就是对中文的不支持,所以很多人都会去选择apache公司提供的。然而apache公司提供的同样也有语言问题。但Java自身的就不会。 在我去网上找过相关的资料,发现...
  • 最近用java写一个工具,要删除某个zip文件下指定目录。在内置API没有找到,后来在网上找到一篇关于zip4j的使用,里面有讲解zip4j删除指定目录。但是测试发现,有些问题,无法直接获取目录的FileHeader。后来自己改编...
  • java获取zip目录

    千次阅读 2019-05-27 16:07:19
    获取zip文件里的第一目录名; 测试用例: @Test public void nsyc() { String imageName = "IMAGE_129201.zip"; String ossDownloadpath = "D:/File/"; ZipUtil. getZipList(ossDownloadpath, imageName); ...
  • java 解压zip文件java.lang.IllegalArgumentException: MALFORMED[1] java.lang.IllegalArgumentException: MALFORMED[1] at java.util.zip.ZipCoder.toString(ZipCoder.java:65) ~[na:1...
  • ·# 需求:需要将zip文件里面的文件进行拷贝,将拷贝后的文件上传到对应的服务器 遇到的问题,在读取zip文件里面的文件时,发现读取到的文件大小和实际文件大小不一致 相关代码如下: public class ...
  • Java实现Zip文件的解压和压缩_ZipUtil

    万次阅读 2017-04-06 15:05:48
    Java实现文件的压缩和解压
  • 1、先用JDK的类进行ZIP文件解压  public List releaseWinZIPByList(String zipPath, String serverPath) {  //zipPath为需要解压的zip文件  //serverPath为解压后文件的存放路径  List list = null;  ...
  • [Java] Java Zip文件压缩与解压缩

    千次阅读 2013-01-11 14:19:38
    apache有个包提供一些简单...下载下来解压缩后,该包中的ant.jar里面提供了zip文件压缩与解压缩的功能代码。在项目中引用该类库。 以下是ZipUtil类的代码,其实现了createZipFile 和 unZip两个功能 package com.u
  • 最近需要用到Javazip文件压缩与解压缩,找了一...java里面有个包叫java.util.zip提供zip文件压缩,但是编码的时候非常不方便。编码量太多了,通过搜索,发现apache有个包提供一些简单的方法来实现zip文件的压缩与解压
  • 一、压缩文件大致可以分为三种:... 在JAVA中,为了减少传输时的数据量也提供了专门的压缩流,可以将文件或文件夹压缩成 ZIP、JAR、GZIP等文件的格式。 压缩流的实现:正常情况下在IO操作中,所有的类库都是在io包...
  • 昨天部署系统到linux上,系统里有个java解压用户上传的zip包的功能。在windows上运行没有问题,可到了linux上如果zip包里包含中文名的文件传上去后文件名就是乱码。就这个问题我和我的小师傅(一个教了我不少东西的...
  • java导入导出zip文件

    2020-08-10 11:29:58
    zip导入 public SwaggerResultUtil<String> importDefinition(@RequestParam(value = "file") MultipartFile file) { SwaggerResultUtil<String> resultUtil; String fileName = file....
  • 可以支持GBK或者UTF8编码格式的zip文件,支持zip中的txt文件内容编码格式内容为GBK或者UTF8格式,原生java读取不需要依赖三方包。 二、代码 由于没啥太多好描述的,废话不多说,直接上代码: import org.apache....
  • 1. 解析zip文件读取文件流: package test; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io....
  • 文章目录Java解压zip文件工具类(支持zip文件夹下多级目录结构)1. 前言2. 正文2.1 解压缩后文件目录结构展示2.2 注意事项2.3 异常2.3.1 可能会遇到的异常2.3.2 解决方案2.4 具体代码实现2.4 遗留问题 Java解压zip...
  • 1、创建工具类,根据url下载文件生成字节码 private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZip.class); // 根据文件链接把文件下载下来并且转成字节码 public byte[] ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,030
精华内容 12,412
关键字:

java获取zip文件编码

java 订阅