精华内容
下载资源
问答
  • 2021-04-22 11:35:39

    zip压缩文件解压乱码问题,请使用commons.compress 的jar处理

    样例代码如下:

    public static List> getUnZip(File srcFile, File destDir) throws IOException {

    int BUFFER_SIZE = 2048;

    ZipArchiveInputStream is = null;

    List> lst_unzip = new ArrayList>();

    try {

    is = new ZipArchiveInputStream(new BufferedInputStream(new FileInputStream(srcFile), BUFFER_SIZE));

    ZipArchiveEntry entry = null;

    while ((entry = is.getNextZipEntry()) != null) {

    if (entry.isDirectory()) {

    File directory = new File(destDir, entry.getName());

    directory.mkdirs();

    } else {

    Map unfile = new HashMap();

    unfile.put("src", "");

    unfile.put("yname", "");

    String subffix = entry.getName();

    String fname = destDir + subffix;

    OutputStream os = null;

    try {

    unfile.put("yname", entry.getName());

    os = new BufferedOutputStream(new FileOutputStream(new File(fname)), BUFFER_SIZE);

    IOUtils.copy(is, os);

    } finally {

    IOUtils.closeQuietly(os);

    }

    subffix = fname;

    if (subffix.indexOf(".") > 0) {

    subffix = subffix.substring(subffix.lastIndexOf(".") + 1);

    }

    String nfname = destDir + UUID.randomUUID().toString() + "."+ subffix;

    File f = new File(fname);

    File toFile = new File(nfname);

    FileUtils.copyFile(f,toFile);

    if(f.exists())

    {

    f.delete();

    }

    unfile.put("src", toFile.getName());

    unfile.put("yname", entry.getName());

    lst_unzip.add(unfile);

    }

    }

    }finally{

    IOUtils.closeQuietly(is);

    }

    return lst_unzip;

    }

    public static List> getUnZip(String srcFile, String destDir) throws IOException {

    File zip = new File(srcFile);

    if (!zip.exists()) {

    return new ArrayList>();

    }

    File dir = new File(destDir);

    if ((!dir.exists()) || (!dir.isDirectory())) {

    dir.delete();

    dir.mkdirs();

    }

    if (!destDir.endsWith("//") && !destDir.endsWith("/")) {

    destDir += "//";

    }

    return getUnZip(new File(srcFile), new File(destDir));

    }

    更多相关内容
  • 本工程用于研究如何使用Java代码获取文件文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891
  • 挺好用的文件获取编码的工具类 源文件地址: https://gist.github.com/willonboy/6111073
  • 获取file文件字符编码 package com.file; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public...

    获取file文件字符编码

    package com.file;
    
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    public class CharsetCodeTest {
    
    	public static void main(String[] args) throws Exception {
    
    		String filePath = "D:\\1.txt";
    		String content = readTxt(filePath);
    		System.out.println(content);
    	}
    
    	public static String readTxt(String path) {
    		StringBuilder content = new StringBuilder("");
    		try {
    			String fileCharsetName = getFileCharsetName(path);
    			System.out.println("文件的编码格式为:" + fileCharsetName);
    			InputStream is = new FileInputStream(path);
    			InputStreamReader isr = new InputStreamReader(is, fileCharsetName);
    			BufferedReader br = new BufferedReader(isr);
    			String str = "";
    			boolean isFirst = true;
    			while (null != (str = br.readLine())) {
    				if (!isFirst)
    					content.append(System.lineSeparator());
    				// System.getProperty("line.separator");
    				else
    					isFirst = false;
    				content.append(str);
    			}
    			br.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.err.println("读取文件:" + path + "失败!");
    		}
    		return content.toString();
    	}
    	public static String getFileCharsetName(String fileName) throws IOException {
    		InputStream inputStream = new FileInputStream(fileName);
    		byte[] head = new byte[3];
    		inputStream.read(head);
    		String charsetName = "GBK";// 或GB2312,即ANSI
    		if (head[0] == -1 && head[1] == -2) // 0xFFFE
    			charsetName = "UTF-16";
    		else if (head[0] == -2 && head[1] == -1) // 0xFEFF
    			charsetName = "Unicode";// 包含两种编码格式:UCS2-Big-Endian和UCS2-Little-Endian
    		else if (head[0] == -27 && head[1] == -101 && head[2] == -98)
    			charsetName = "UTF-8"; // UTF-8(不含BOM)
    		else if (head[0] == -17 && head[1] == -69 && head[2] == -65)
    			charsetName = "UTF-8"; // UTF-8-BOM
    		inputStream.close();
    		System.out.println(charsetName);
    		return charsetName;
    	}
    }
    

    获取zip文件编码格式(解决读取乱码)

    package com.file;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.nio.charset.Charset;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    import java.util.zip.ZipInputStream;
    
    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 {
    
        /**
         * 利用第三方开源包cpdetector获取文件编码格式.
         * @param is
         */
        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) {
               
            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
              
                    }
                }
            }
         // 默认为GBK
            String charsetName = "GBK";
            if (charset != null) {
                if (charset.name().equals("US-ASCII")) {
                	charsetName = "ISO_8859_1";
                } else {
                    charsetName = charset.name();
                }
            }
            System.out.println(charsetName);
            return charsetName;        
        }
        
        public static void main(String[] args) throws IOException {
        	String path = "D:\\20210827092009_erqi.zip";
        	ZipFile zipFile = new ZipFile(path);
        	File file = new File(path);
        	ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));
        	ZipEntry  zipEntry = null;
        	while((zipEntry = zipInput.getNextEntry())!=null){
    			zipFile = new ZipFile(file);
    			InputStream inputStream = zipFile.getInputStream(zipEntry);
    			String encode=getFileEncode(inputStream);
    			BufferedReader bufferRead = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry),encode));
    			String strInsert = null;
    			while((strInsert = bufferRead.readLine()) != null){
    				System.out.println(strInsert);
    			}
        	}
    	}
    }
    

    jar包下载地址https://download.csdn.net/download/m0_37987151/21615417

    展开全文
  • Java zip字符编码

    2021-07-17 01:48:06
    I'm using the following method to compress a file into a zip file:import java.util.zip.CRC32;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public static void doZip(final File inpu...

    I'm using the following method to compress a file into a zip file:

    import java.util.zip.CRC32;

    import java.util.zip.ZipEntry;

    import java.util.zip.ZipOutputStream;

    public static void doZip(final File inputfis, final File outputfis) throws IOException {

    FileInputStream fis = null;

    FileOutputStream fos = null;

    final CRC32 crc = new CRC32();

    crc.reset();

    try {

    fis = new FileInputStream(inputfis);

    fos = new FileOutputStream(outputfis);

    final ZipOutputStream zos = new ZipOutputStream(fos);

    zos.setLevel(6);

    final ZipEntry ze = new ZipEntry(inputfis.getName());

    zos.putNextEntry(ze);

    final int BUFSIZ = 8192;

    final byte inbuf[] = new byte[BUFSIZ];

    int n;

    while ((n = fis.read(inbuf)) != -1) {

    zos.write(inbuf, 0, n);

    crc.update(inbuf);

    }

    ze.setCrc(crc.getValue());

    zos.finish();

    zos.close();

    } catch (final IOException e) {

    throw e;

    } finally {

    if (fis != null) {

    fis.close();

    }

    if (fos != null) {

    fos.close();

    }

    }

    }

    My problem is that i have flat text files with the content N°TICKET for example, the zipped result gives some weired characters when uncompressed N° TICKET. Also characters such as é and à are not supported.

    I guess it's due to the character encoding, but I don't know how to set it in my zip method to ISO-8859-1 ?

    (I'm running on windows 7, java 6)

    解决方案

    You are using streams which write exactly the bytes that they are given. Writers interpret character data and convert it to the corresponding bytes and Readers do the opposite. Java (at least in version 6) doesn't provide an easy way to to mix and match operations on zipped data and for writing characters.

    This way will work though. It is, however, a little clunky.

    File inputFile = new File("utf-8-data.txt");

    File outputFile = new File("latin-1-data.zip");

    ZipEntry entry = new ZipEntry("latin-1-data.txt");

    BufferedReader reader = new BufferedReader(new FileReader(inputFile));

    ZipOutputStream zipStream = new ZipOutputStream(new FileOutputStream(outputFile));

    BufferedWriter writer = new BufferedWriter(

    new OutputStreamWriter(zipStream, Charset.forName("ISO-8859-1"))

    );

    zipStream.putNextEntry(entry);

    // this is the important part:

    // all character data is written via the writer and not the zip output stream

    String line = null;

    while ((line = reader.readLine()) != null) {

    writer.append(line).append('\n');

    }

    writer.flush(); // i've used a buffered writer, so make sure to flush to the

    // underlying zip output stream

    zipStream.closeEntry();

    zipStream.finish();

    reader.close();

    writer.close();

    展开全文
  • EncodingDetect.javajava自动获取文件的编码,智能识别文件编码,支持本地file及指定url的编码识别,支持多达40余种编码的识别,包括最常见的UTF-8,GBK,GB2312,BIG5,UNICODE,ISO8859_1,ASCII等,FileUtil....
  • 我们的产品有一个导出功能,它使用...由于某种原因,压缩文件中的新文件的命名方式不同.以下是我们的压缩代码示例:ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));out.setEnco...

    我们的产品有一个导出功能,它使用ZipOutputStream压缩目录;但是,当您尝试压缩包含具有中文或日文字符的文件名的目录时,导出将无法正常工作.由于某种原因,压缩文件中的新文件的命名方式不同.以下是我们的压缩代码示例:

    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));

    out.setEncoding("UTF-8");

    //program to add directory to zip

    //program add/create file to zip

    out.close();

    我的导入算法也是用Java构建的,即使文件/目录名中包含中文/日文字符,也可以正确导入压缩文件.

    Zipfile zipfile = new ZipFile(zipPath, "UTF-8");

    Enumeration e = zipFile.getEntries();

    while (e.hasMoreElements()) {

    entry = (ZipEntry) e.nextElement();

    String name = entry.getName();

    ....

    zip软件的程序是否在解压缩UTF-8编码文件时遇到问题,或者是否有一些特殊需要创建一个zip文件,现有软件可以使用utf-8编码轻松使用?

    我写了一个示例程序:

    package ZipFile;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import org.apache.tools.zip.ZipEntry;

    import org.apache.tools.zip.ZipOutputStream;

    public class ZipFolder{

    public static void main(String[] a) throws Exception

    {

    String srcFolder = "D:/9.4_work/openscript_repo/中文124.All/中文";

    String destZipFile = "D:/Eclipse_Projects/OpenScriptDebuggingProject/src/ZipFile/demo.zip";

    zipFolder(srcFolder, destZipFile);

    }

    static public void zipFolder(String srcFolder, String destZipFile) throws Exception

    {

    ZipOutputStream zip = null;

    FileOutputStream fileWriter = null;

    fileWriter = new FileOutputStream(destZipFile);

    zip = new ZipOutputStream(fileWriter);

    zip.setEncoding("UTF-8");

    // using GBK encoding, the chinese name can be correctly displayed when unzip

    // zip.setEncoding("GBK");

    addFolderToZip("", srcFolder, zip);

    zip.flush();

    zip.close();

    }

    static private void addFileToZip(String path, String srcFile, ZipOutputStream zip) throws Exception

    {

    File folder = new File(srcFile);

    if (folder.isDirectory()) {

    addFolderToZip(path, srcFile, zip);

    }

    else {

    byte[] buf = new byte[1024];

    int len;

    FileInputStream in = new FileInputStream(srcFile);

    zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));

    while ((len = in.read(buf)) > 0) {

    zip.write(buf, 0, len);

    }

    }

    }

    static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip) throws Exception

    {

    File folder = new File(srcFolder);

    for (String fileName : folder.list()) {

    if (path.equals("")) {

    addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);

    }

    else {

    addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);

    }

    }

    }

    }

    解决方法:

    这里的最佳答案可以回答你的问题;不幸的是,它似乎表明Zip格式并不真正允许创建一个Zip文件,可以在任何计算机上正确显示文件名:

    我希望它在你将编码设置为GBK时有效,因为这是你系统的默认编码,所以7zip正在使用它来打开所有的zip文件.

    它表明rar和7z格式有更好的支持.

    我在Java的拉链中找到了一篇专门介绍UTF-8的博客文章.它表明有一个较新版本的ZIP规范,当前版本的Java可能没有创建,但Java 7会这样做.我不知道Apache类是否也使用它.

    标签:java,encoding,zip,unzip,7zip

    来源: https://codeday.me/bug/20190704/1380779.html

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

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

    千次阅读 2022-03-07 16:26:17
    目录Java操作文件打包下载Java操作文件打包上传注意事项 Java操作文件打包下载 public void downloadEcsZip(String fileName,List<Map<String,String>> filesMap,HttpServletResponse response) throws...
  • import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.nio.charset.Charset;import java.util....import java.util.zip.ZipEntry;imp...
  • java下载zip文件

    千次阅读 2021-08-26 18:45:59
    1.参考API可见,Java的JDK中提供一个java.util.zip的接口。其压缩过程主要是通过这两个接口压缩文件或者文件夹; java.util.zip.ZipEntry; java.util.zip.ZipOutputStream; 2.功能实现 1)页面请求方式: ...
  • java读取zip (含压缩包内的文件)

    千次阅读 2021-02-12 14:20:23
    java中使用ZipFile、ZipInputStream快速读取或解压zip压缩包中的目录和文件。完整示例:packagecom.weizhixi;importorg.apache.commons.io.IOUtils;importjava.io.File;importjava.io.FileInputStream;importjava...
  • Java实现zip文件的解压与压缩

    千次阅读 2021-05-17 20:50:29
    Java实现zip文件的操作 文章目录Java实现zip文件的操作1.读取zip文件中的文件名称2.读取zip文件内容3.解压zip文件4.压缩文件成zip文件 1.读取zip文件中的文件名称 //这里path指的是读取的zip文件路径 public static ...
  • 今天在项目中需要使用到了zip解压技术,用于解压压缩包,从而获取其中的文件进行操作,但其中涉及到中文编码,和io流的问题需要注意。 问题分析: 1.编码问题 由于zip解压缩文件会产生编码问题,如中文,不解决的...
  • java解压zip包出现乱码

    千次阅读 2021-03-11 10:43:05
    解决思路:首先判断需要解压的文件是否存在或路径是否正确,接着判断路径是否存在,若不存在则创建路径,然后判断压缩文件是否合法,最后设置文件名称编码为“GBK”即可。免费在线教学视频分享:java教学视频示例...
  • Java解压zip文件(文本)压缩包

    千次阅读 2021-02-25 18:30:29
    说明:由于我们的日志收集到指定服务器上,会按天压缩成一个zip格式的压缩包,但是有时候需要对这些日志进行处理,人工解压在处理,显示对于大量的日志处理是不行的(效率太低),所以还是要采用程序自动解压效率比较...
  • 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文件(zip4j)

    千次阅读 2021-10-24 16:56:31
    在成功将远程zip文件下载到本地后,如何将本地zip文件解压到本地指定目录就是接下来要解决的问题,将文件解压到本地指定目录后的心得与理解在此进行记录。 提示:以下是本篇文章正文内容,下面案例可供参考 一、...
  • 可以支持GBK或者UTF8编码格式的zip文件,支持zip中的txt文件内容编码格式内容为GBK或者UTF8格式,原生java读取不需要依赖三方包。 二、代码 由于没啥太多好描述的,废话不多说,直接上代码: import org.apache....
  • 基于jdk1.8版本编写、测试; 使用zip4j1.3.2; 可解决压缩包解压后,文件名乱码; 支持情况 支持 压缩、解压缩操作; 支持 加密、不加密操作; 支持 自适应压缩包编码格式; 具体代码
  • java zip文件的压缩与解压

    千次阅读 2021-03-14 23:26:07
    java里面也提供了将文件进行压缩以减少传输时的数据量的类,可以很方便的将文件压缩成ZIP、JAR、GZIP等形java里面有个包叫java.util.zip提供zip文件压缩,但是编码的时候非常不方便。编码量太多了,通过搜索,发现...
  • 场景:解压xxxx.zip文件(如果zip文件里面嵌套zip,市面上工具基本不支持,自己写个递归方法即可),中文文件名出现乱码 工具:zip4j(默认编码集UTF-8) 乱码原因: ZIP格式在不同平台上使用不同软件压缩: 1...
  • 在多个文件导出的时候,我们常常会将多文件压缩之后导出zip文件到页面。下面直接上代码。 @ApiOperation(value = "导出模板文件") @GetMapping("exportTemplate") public void exportTemplate(HttpServletRequest...
  • 第一步:获取到上传的文件 @RequestMapping(value = "/xxx",produces = {"application/json;charset=UTF-8"}) public Response import(MultipartFile file) throws Exception {} 第二步:获取文件流 //...
  • JavaZip中Excel文件的解析

    千次阅读 2020-09-09 21:19:45
    然而在后续中的爬取中又出现了新的问题,那就是有些下载源因为数据量过大或其他原因,提供的是 ZIP 的下载,Excel 文件包含在了 ZIP 中,那么我们就不能在使用 EasyExcel 直接去解析,而是要采取新的方法。...
  • Zip解压-可设置压缩文件编码方式

    热门讨论 2015-09-19 22:32:24
    jdk自带的ZipEntry类解压zip文件,中文文件会出现乱码,jar包是根据Apache的解压缩包进行改造的,也适合于Android使用
  • import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat;...import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public cl
  • 引入的jar包不对,或者你的压缩文件不标准。...关于上面英语的翻译:Key features(主要特性):Create, Add, Extract, Update, Remove files from a Zip file(针对ZIP压缩文件创建、添加、抽出、更新和移除文件)Read/W...
  • java导入导出zip文件

    2020-08-10 11:29:58
    zip导入 public SwaggerResultUtil<String> importDefinition(@RequestParam(value = "file") MultipartFile file) { SwaggerResultUtil<String> resultUtil; String fileName = file....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,153
精华内容 13,661
关键字:

java获取zip文件编码

java 订阅
友情链接: MATALB 程序.zip