精华内容
下载资源
问答
  • 用java来打包文件生成压缩文件,有两个地方会出现乱码:内容的中文乱码问题:修改sun的源码。使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以下载...

    用java来打包文件生成压缩文件,有两个地方会出现乱码:

    内容的中文乱码问题:修改sun的源码。使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以下载使用即可。

    压缩文件注释的中文乱码问题:zos.setComment("中文测试");通过使用设置编码的方法(zos.setEncoding("gbk");)发现问题,测试项目的编码方式为gbk,而默认编码是utf-8。

    org.apache.tools.zip.ZipOutputStream默认使用项目的编码方式,通过setEncoding方法改成gbk即可解决。

    java压缩文件代码:

    package com.compress;

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.DataInputStream;

    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 CompressEncodingTest {

    /**

    * @param args

    * @throws Exception

    */

    public static void main(String[] args) throws Exception {

    File f = new File("中文测试.txt");

    ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(

    new FileOutputStream("zipTest.zip"), 1024));

    zos.putNextEntry(new ZipEntry("中国人.txt"));

    DataInputStream dis = new DataInputStream(new BufferedInputStream(

    new FileInputStream(f)));

    zos.putNextEntry(new ZipEntry(f.getName()));

    int c;

    while ((c = dis.read()) != -1) {

    zos.write(c);

    }

    zos.setEncoding("gbk");

    zos.setComment("中文测试");

    zos.closeEntry();

    zos.close();

    }

    }

    以上就是java压缩文件乱码问题的详细内容,感谢大家的学习和对我们的支持。

    展开全文
  • 将文件压缩为一个包再下载,期间出现一个问题是本地没问题,sit环境出现压缩文件解压里面的文件名乱码,后来发现自己使用的是jdk1.8,而项目用的是jdk1.6。jdk1.6关于压缩文件有一个bug,在jdk1.7的时候才修复。 ...

    方法一:【成功】

    将文件压缩为一个包再下载,期间出现一个问题是本地没问题,sit环境出现压缩文件解压后里面的文件名乱码,后来发现自己使用的是jdk1.8,而项目用的是jdk1.6。jdk1.6关于压缩文件有一个bug,在jdk1.7的时候才修复。

    前端代码:

    /**下载按钮事件*/
    	$("#downloadBtn").click(function(){
    		/*图片路径集合*/
    		var _list = []; 
    		var i=-1;
            $.each($('input:checkbox'),function(){
                if(this.checked && $(this).val()!=null &&$(this).val()!='on'){
                	i=i+1
                	 _list[i]=$(this).val();
                }
            });
            
            /*传递路径至后台*/
            
            if(_list.length!=null&&_list.length!=0){
            	submitPath(_list)
            }else{
            	alert("请选择一条记录下载")
            }
        });
    /**表单提交所有路径进行下载*/
    function submitPath(list){
    	var form=$("<form>");
    	form.attr("style","display:none");
    	form.attr("target","_blank");
    	form.attr("method","post");
    	form.attr("action","downloadFile.html");
    	var input1=$("<input>");
    	input1.attr("type","hidden")
    	input1.attr("name","list")
    	input1.attr("value",list)
    	$("body").append(form);
    	form.append(input1);
    	form.submit();
    }
    

    后台代码:

    	/**
    	 * 下载附件
    	 */
    	@ResponseBody
    	@RequestMapping(value = "downloadFile", method = { RequestMethod.POST, RequestMethod.GET })
    	public void downloadFile(@RequestParam("list")List<String> paths,QueryEntity entity, ModelMap model, HttpServletResponse response) throws Exception {
    		log.info("==========下载附件==========");
    		List<File> files = new ArrayList(); 
    		int allpaths = paths.size();
    		/*传递参数:附件所在路径是集合*/
    		//循环将路径传入下载方法
    		for (String path : paths) {
    				String filename = path.substring(0, path.indexOf(";"))+path.substring(path.indexOf("."), path.length());  //单个附件名称
    //				filename = new String(filename.getBytes("ISO-8859-1"), "UTF-8"); 
    				String imgName = path.substring(path.lastIndexOf("/")+1);//单独的图片路径
    				ChannelSftp channelSftp = null;
    				OutputStream os = null;
    			    String localPathFile =this.localPathName + "/" + StringUtils.substringBeforeLast(imgName, ".");				
    				try {
    					 channelSftp = connectFTP();
    					 //获取文件分隔符
    				     String fileSeparator = System.getProperty("file.separator");
    				     //获取加密后文件的相对路径 开发环境 "/root//home/ips/cc"
    					 String srcPath = remotePathCc + "/" + StringUtils.substringBeforeLast(imgName, ".");
    //				     String srcPath = "/root//home/ips/cc" + "/" + StringUtils.substringBeforeLast(imgName, ".");
    					 File localPath = new File(localPathFile);
    					 if(!localPath.exists()) {
    						 localPath.mkdirs();
    				     }
    					 //目标路径
    				     String destPath = this.localPathName + fileSeparator;
    				     //密钥
    				     String key = idCardInfoService.getKey();
    				    //获取照片文件后缀名
    				     String suffix = "." + StringUtils.substringAfter(imgName, ".");
    				     //下载文件到服务器临时文件夹
    					 FtpManageUtil.SftpDownloadEncryptFile(channelSftp, srcPath, localPathFile);
    					 //解密合并图片
    //					 IpsFileUtils.decryptMerge(localPathFile + fileSeparator, destPath, "", suffix, filename, key);
    					 IpsFileUtils.decryptMerge(localPathFile + fileSeparator, destPath, "", suffix, imgName, key);
    //					 rename(imgName,filename);
    					//读取图片输入流
    //				     File file = new File(destPath+imgName);
    					 File file = new File(destPath+imgName);
    					 file.renameTo(new File(destPath+filename));
    					 File newfile = new File(destPath+filename);
    //					 files.add(file);
    					 files.add(newfile);
    				     log.info("<<<<<<"+"localPathFile{}"+localPathFile+" *fileSeparator{}"+fileSeparator+" *destPath{}"+destPath+" *suffix{}"+suffix+" *imgName{}"+imgName+" *key{}"+key+" *newfilename{}"+newfile.getName()+">>>>>>");
    				     //只有一个文件就不压缩
    				     if (allpaths<=1) {
    						    response.setContentType("application/OCTET-STREAM");
    //							response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(imgName, "UTF-8"));
    						    response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
    					        //读取要下载的文件,保存到文件输入流
    //					        FileInputStream in = new FileInputStream(destPath + imgName);
    						    FileInputStream in = new FileInputStream(destPath + filename);
    					        //创建输出流
    					        OutputStream out = response.getOutputStream();
    					        //创建缓冲区
    					        byte buffer[] = new byte[1024];
    					        int len = 0;
    					        //循环将输入流中的内容读取到缓冲区当中 
    					        while((len=in.read(buffer))>0){
    					            //输出缓冲区的内容到浏览器,实现文件下载
    					            out.write(buffer, 0, len);
    					        }
    					        //关闭文件输入流   
    					        in.close();
    					        //关闭输出流
    					        out.close();
    											
    					}
    				    file.delete(); //删除合成后的文件		
    					FileUtils.delAllFile(localPathFile); //删除解密前文件方式
    				} catch (Exception e) {
    					log.error("sftp下载异常", e.getMessage(), e);
    //					model.addAttribute(Constants._message, e.getMessage());  
    					throw new BizException("sftp下载异常");
    				} finally {
    					if (null != os) {
    						try {
    							os.close();
    						} catch (IOException e) {
    							log.error("outputstream 关闭异常",e.getMessage(),e);
    						}
    					}
    					if (null != channelSftp) {
    						try {
    							if (null != channelSftp.getSession()) {
    								channelSftp.getSession().disconnect();
    							}
    							channelSftp.disconnect();
    						} catch (Exception e2) {
    							log.error("sftp关闭异常",e2.getMessage(),e2);
    							model.addAttribute(Constants._message, msa.getMessage(Errors.E999999));
    						}
    					}
    				}
    				/*下载ftp图片结束*/
    		}
    		log.info("文件list{}"+files);
    		if (allpaths>1&&files.size()!=0) {
    			this.downLoadFiles(files, response);
    		}
    		FileUtils.delAllFile(this.localPathName); //删除解密前文件方式
    	}
    	
    	private static final String COMPLAINTEVENT_Details_URL =  "/userlevel/complainManage/complainDetails";
    	@Autowired
    	private IdCardInfoService idCardInfoService;
        @Value("${remote_Path}")
        private String remotePathCc;// = "/root//home/ips/cc";// FTP服务器上的相对路径
        @Value("${img_ftp_username}")
        private String username; // FTP登录账号
        @Value("${img_ftp_password}")
        private String password; // FTP登录密码
    	@Value("${img_ftp_host}")
        private String url;// FTP服务器hostname
        @Value("${img_ftp_port}")
        private int port;// FTP服务器端口
    	private ChannelSftp connectFTP() {
    		
    		 JSch jsch = new JSch();
    		 ChannelSftp sftp = null;
    		 try {
    			 Session session = jsch.getSession(username, url, port);
    			 session.setPassword(password);
    			 Properties sshConfig = new Properties();
    			 sshConfig.put("StrictHostKeyChecking", "no");
    			 session.setConfig(sshConfig);
    			 session.connect();
    			 Channel channel = session.openChannel("sftp");
    			 channel.connect();
    			 sftp = (ChannelSftp)channel;
    	        } catch (Exception e) {
    	            log.error("连接ftp异常"+"[url:"+this.url+"|user:"+this.username+"]",e.getMessage(),e);
    	        }
    		 return sftp;
    	}
        
    
        
        public HttpServletResponse downLoadFiles(List<File> files,HttpServletResponse response)throws Exception {
    
            try {
               //List<File> 作为参数传进来,就是把多个文件的路径放到一个list里面
                //创建一个临时压缩文件
    
               //临时文件可以放在CDEF盘中,但不建议这么做,因为需要先设置磁盘的访问权限,最好是放在服务器上,方法最后有删除临时文件的步骤
                String zipFilename = this.localPathName+"运管客诉附件.zip" ;
                File file = new File(zipFilename); 
                if (!file.exists()){   
                    file.createNewFile();   
                }
                response.reset();
                //response.getWriter()
                //创建文件输出流
    /*            FileOutputStream fous = new FileOutputStream(file);   
               ZipOutputStream zipOut = new ZipOutputStream(fous);
               zipFile(files, zipOut);
                zipOut.close();
                fous.close();*///这个方法及下面的代码都不适用了
    /*由于jdk1.6使用Java自带的压缩方法会出现文件名中文乱码,顾改成tomcat的压缩方法*/
                FileCompressUtil.compressFiles2Zip(files, file, true);
                response.reset();
               return downloadZip(file,response);
            }catch (Exception e) {
                    e.printStackTrace();
                }
            return response ;
        }
    
      /**
         * 把接受的全部文件打成压缩包 
         * @param List<File>;  
         * @param org.apache.tools.zip.ZipOutputStream  
         */
        public static void zipFile (List files,ZipOutputStream outputStream) {
            int size = files.size();
            for(int i = 0; i < size; i++) {
                File file = (File) files.get(i);
                zipFile(file, outputStream);
            }
        }
        /**  
         * 根据输入的文件与输出流对文件进行打包
         * @param File
         * @param org.apache.tools.zip.ZipOutputStream
         */
        public static void zipFile(File inputFile,  ZipOutputStream ouputStream) {
            try {
                if(inputFile.exists()) {
                    if (inputFile.isFile()) {
                        FileInputStream IN = new FileInputStream(inputFile);
                        BufferedInputStream bins = new BufferedInputStream(IN, 512);
                        ZipEntry entry = new ZipEntry(inputFile.getName());
                        ouputStream.putNextEntry(entry);
                        // 向压缩文件中输出数据   
                        int nNumber;
                        byte[] buffer = new byte[512];
                        while ((nNumber = bins.read(buffer)) != -1) {
                            ouputStream.write(buffer, 0, nNumber);
                        }
                        // 关闭创建的流对象   
                        bins.close();
                        IN.close();
                    } else {
                        try {
                            File[] files = inputFile.listFiles();
                            for (int i = 0; i < files.length; i++) {
                                zipFile(files[i], ouputStream);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    //    public static HttpServletResponse downloadZip(File file,HttpServletResponse response) {
            public static HttpServletResponse downloadZip(File file,HttpServletResponse response) {       
        	 if(file.exists() == false){  
                System.out.println("待压缩的文件目录:"+file+"不存在."); 
            }else{ 
                try {
                // 以流的形式下载文件。
                InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
                byte[] buffer = new byte[fis.available()];
                fis.read(buffer);
                fis.close();
                // 清空response  
                response.reset();
        
                OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                response.setContentType("application/octet-stream");
        
                //如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理
    /*            response.setHeader("Content-Disposition", "attachment;filename="
                        + new String(file.getName().getBytes("GB2312"), "ISO8859-1"));*/
               response.setHeader("Content-Disposition", "attachment;filename="
                        +  URLEncoder.encode(file.getName(), "UTF-8"));
                toClient.write(buffer);
                toClient.flush();
                toClient.close();
                } catch (IOException ex) {
                ex.printStackTrace();
                }finally{
                     try {
                            File f = new File(file.getPath());
                            f.delete();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                }
            }
            return response;
        }

    使用tomcat的压缩方法的类

    /**
     * Copyright 2017 by IPS. Floor 3,Universal Industrial Building, 
     * Tian Yaoqiao Road 1178,Shanghai, P.R. China,200300. All rights reserved.
     *
     * This software is the confidential and proprietary information of IPS
     * ("Confidential Information"). You shall not disclose such
     * Confidential Information and shall use it only in accordance with the terms
     * of the license agreement you entered into with IPS.
     */
    package com.ips.boms.utils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    import org.apache.commons.compress.archivers.ArchiveException;
    import org.apache.commons.compress.archivers.ArchiveOutputStream;
    import org.apache.commons.compress.archivers.ArchiveStreamFactory;
    import org.apache.commons.compress.archivers.zip.Zip64Mode;
    import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
    import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
    
    /**   
     *   
     *     
     * Create by tyshu  2019年3月5日 下午5:07:06  
     * @Copyright: 2019 IPS Inc. All rights reserved. 
     * 
     */
    public class FileCompressUtil {
        
        /**
         * 将文件打包成zip压缩包文件
         *
         * @param files              要压缩的文件
         * @param zipFile            压缩后的文件
         * @param deleteFileAfterZip 压缩文件后删除原来的文件,临时文件时记得删除
         * @return 是否压缩成功
         */
        public static boolean compressFiles2Zip(List<File> files, File zipFile, boolean deleteFileAfterZip) {
    
            InputStream inputStream = null;
            ZipArchiveOutputStream zipArchiveOutputStream = null;
            try {
                zipArchiveOutputStream = new ZipArchiveOutputStream(zipFile);
                //Use Zip64 extensions for all entries where they are required
                zipArchiveOutputStream.setUseZip64(Zip64Mode.AsNeeded);
                for (File file : files) {
                    //将每个文件用ZipArchiveEntry封装,使用ZipArchiveOutputStream写到压缩文件
                    ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file, file.getName());
                    zipArchiveOutputStream.putArchiveEntry(zipArchiveEntry);
    
                    inputStream = new FileInputStream(file);
                    byte[] buffer = new byte[1024 * 5];
                    int len = -1;
                    while ((len = inputStream.read(buffer)) != -1) {
                        //把缓冲区的字节写入到ZipArchiveEntry
                        zipArchiveOutputStream.write(buffer, 0, len);
                    }
                }
                zipArchiveOutputStream.closeArchiveEntry();
                zipArchiveOutputStream.finish();
    
                if (deleteFileAfterZip) {
                    for (File file : files) {
                        file.deleteOnExit();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            } finally {
                try {
                    //关闭输入流
                    if (null != inputStream) {
                        inputStream.close();
                    }
                    //关闭输出流
                    if (null != zipArchiveOutputStream) {
                        zipArchiveOutputStream.close();
                    }
                } catch (IOException e) {
                    //e.printStackTrace();
                }
            }
            return true;
        }
    
        public static void main(String[] args) {
    
        }
    
    }
    

    需要引入一个包:

    
           <!-- 在pom.xml中引入文件 -->
           <!-- tomcat的压缩方法 -->
            <dependency>  
                <groupId>org.apache.commons</groupId>  
                <artifactId>commons-compress</artifactId>  
                <version>1.5</version>  
            </dependency>

    方法二:【失败】

    是没有用的,妥协使用压缩下载的方式,但还是记录一下。

    需求:前端勾选附件,点击下载即下载被勾选的所有文件。

    方法:采用前台循环请求后台的方式,下载被勾选的文件。请求一次下载一个文件。以下为前台代码,后台为普通的下载代码。

    尝试:1.后台for循环调用下载方法【失败】因为response只能下载一次。

               2.循环Ajax发送请求【失败】因为Ajax不能传io流。

               3.循环使用    window.open()请求【失败】原因不详

               4.循环使用from表单发送请求【失败】alert发现每次前台执行完for才网后台发送请求。

               5.使用以下这个方法也失败【失败】但是要注意循环时要有间隔时间,虽然请求很快但还是还会需要时间,避免同时发送请求所以设置了间隔时间,因为不知道下载要多少时间所以每次下载下来的数据都被破坏打不开。

    前端 js代码:

    /**下载按钮事件*/
        $("#downloadBtn").click(function(){
            /*图片路径集合*/
            var _list = []; 
            var i=-1;
            $.each($('input:checkbox'),function(){
                if(this.checked && $(this).val()!=null &&$(this).val()!='on'){
                    i=i+1
                     _list[i]=$(this).val();
                }
            });
            /*传递路径至后台*/
            if(_list.length!=null&&_list.length!=0){
                //循环向后台发送请求
                for(i=0;i<_list.length;i++){

                   //调用submitPath方法,向后台发送请求
                    setTimeout(submitPath(_list[i]), 1000);
                }
            }else{
                alert("请选择一条记录下载")
            }
        });

    /**循环提交表单提交路径进行下载*/
    function submitPath(path){
          var a = document.createElement("a"), //创建a标签
              e = document.createEvent("MouseEvents"); //创建鼠标事件对象
          e.initEvent("click", false, false); //初始化事件对象
          a.href = "downloadFile.html?path="+path; //设置下载地址
         a.download = path.substr(path.lastIndexOf("/") + 1); //设置下载文件名
          a.dispatchEvent(e); //给指定的元素,执行事件click事件
    }

    后台控制层代码:

        /**
         * 下载附件【该方法涉及sftp解密下载,】
         */
        @ResponseBody
        @RequestMapping(value = "downloadFile", method = { RequestMethod.POST, RequestMethod.GET })
        public void downloadFile(String path,QueryEntity entity, ModelMap model, HttpServletResponse response) throws Exception {
            log.info("==========下载附件{}"+path);
        OutputStream out = response.getOutputStream();
        /*传递参数:附件所在路径是集合*/
        //循环将路径传入下载方法
                String imgName = path.substring(path.lastIndexOf("/")+1);//单独的图片路径
                ChannelSftp channelSftp = null;
                OutputStream os = null;
                try {
                     channelSftp = connectFTP();
                    
                     //获取文件分隔符
                     String fileSeparator = System.getProperty("file.separator");
                     //获取加密后文件的相对路径
                     String srcPath = this.remotePath + "/" + StringUtils.substringBeforeLast(imgName, ".");
                     String localPathFile =this.localPathName + "/" + StringUtils.substringBeforeLast(imgName, ".");
                     File localPath = new File(localPathFile);
                     if(!localPath.exists()) {
                         localPath.mkdirs();
                     }
                     //目标路径
                     String destPath = this.localPathName + fileSeparator;
                     //密钥
                     String key = idCardInfoService.getKey();
                    //获取照片文件后缀名
                     String suffix = "." + StringUtils.substringAfter(imgName, ".");
                     log.info("<<<<<<"+"channelSftp:"+channelSftp+"?srcPath:"+srcPath+"?localPathFile:"+localPathFile+">>>>>>");
                     log.info("<<<<<<"+"localPathFile"+localPathFile+"?fileSeparator:"+fileSeparator+"?destPath:"+destPath+"?suffix:"+suffix+"?imgName:"+imgName+"?key:"+key+">>>>>>");
                     //下载文件到服务器临时文件夹
                     FtpManageUtil.SftpDownloadEncryptFile(channelSftp, srcPath, localPathFile);
                     //解密合并图片
                     IpsFileUtils.decryptMerge(localPathFile + fileSeparator, destPath, "", suffix, imgName, key);
                    //读取图片输入流
                     File file = new File(destPath+imgName);
                    response.setContentType("application/OCTET-STREAM");
                    response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(imgName, "UTF-8"));
                    log.debug("下载地址  {} " , destPath + imgName);
                    //读取要下载的文件,保存到文件输入流
                    FileInputStream in = new FileInputStream(destPath + imgName);
    //                 in = new FileInputStream(destPath + imgName);
                    //创建输出流
    //                OutputStream out = response.getOutputStream();
                    //创建缓冲区
                    byte buffer[] = new byte[1024];
                    int len = 0;
                    //循环将输入流中的内容读取到缓冲区当中 
                    while((len=in.read(buffer))>0){
                        //输出缓冲区的内容到浏览器,实现文件下载
                        out.write(buffer, 0, len);
                    }
                    //关闭文件输入流   
                    in.close();
                    out.close();
                    file.delete(); 
                    //删除多余文件
                    FileUtils.delAllFile(localPathFile); //删除解密前文件方式
                } catch (Exception e) {
                    log.error("sftp下载异常", e.getMessage(), e);
                } finally {
                    if (null != os) {
                        try {
                            os.close();
                        } catch (IOException e) {
                            log.error("outputstream 关闭异常",e.getMessage(),e);
                        }
                    }
                    if (null != channelSftp) {
                        try {
                            if (null != channelSftp.getSession()) {
                                channelSftp.getSession().disconnect();
                            }
                            channelSftp.disconnect();
                        } catch (Exception e2) {
                            log.error("sftp关闭异常",e2.getMessage(),e2);
                            model.addAttribute(Constants._message, msa.getMessage(Errors.E999999));
                        }
                    }
                }

                /*下载ftp图片结束*/

    }

        
        private static final String COMPLAINTEVENT_Details_URL =  "/userlevel/complainManage/complainDetails";
        @Autowired
        private IdCardInfoService idCardInfoService;
    //    @Value("${remote_Path}")
        private String remotePath = "/root//home/ips/cc";// FTP服务器上的相对路径
        @Value("${img_ftp_username}")
        private String username; // FTP登录账号
        @Value("${img_ftp_password}")
        private String password; // FTP登录密码
        @Value("${img_ftp_host}")
        private String url;// FTP服务器hostname
        @Value("${img_ftp_port}")
        private int port;// FTP服务器端口
        private ChannelSftp connectFTP() {
            
             JSch jsch = new JSch();
             ChannelSftp sftp = null;
             try {
                 Session session = jsch.getSession(username, url, port);
                 session.setPassword(password);
                 Properties sshConfig = new Properties();
                 sshConfig.put("StrictHostKeyChecking", "no");
                 session.setConfig(sshConfig);
                 session.connect();
                 Channel channel = session.openChannel("sftp");
                 channel.connect();
                 sftp = (ChannelSftp)channel;
                } catch (Exception e) {
                    log.error("连接ftp异常"+"[url:"+this.url+"|user:"+this.username+"]",e.getMessage(),e);
                }
             return sftp;
        }

     

    展开全文
  • win10系统下载文件、解压缩文件时文件名称乱码的问题 最近电脑文件名总是出现乱码,最终找到了解决方案如下,按照下面图片操作解决了问题: 1.打开window设置 2.选择区域,然后点击相关设置 3.点击区域,然后点击...

    win10系统下载文件、解压缩文件时文件名称乱码的问题

    最近电脑文件名总是出现乱码,最终找到了解决方案如下,按照下面图片操作解决了问题:

    1.打开window设置

    在这里插入图片描述

    2.选择区域,然后点击相关设置

    在这里插入图片描述

    3.点击区域,然后点击管理,再点更改系统区域设置

    在这里插入图片描述

    4.语言选择简体中文,将Beta版前面的√去掉(这个很重要)

    在这里插入图片描述
    然后点击确定,会提示重启电脑,重启电脑后,乱码问题解决。

    展开全文
  • java压缩zip文件中文乱码问题

    千次阅读 2019-05-24 15:06:53
    用java来打包文件生成压缩文件,有两个地方会出现乱码 1、内容的中文乱码问题,这个问题网上很多人给出了解决方法,两种:修改sun的源码;使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools....

     用java来打包文件生成压缩文件,有两个地方会出现乱码

    1、内容的中文乱码问题,这个问题网上很多人给出了解决方法,两种:修改sun的源码;使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以下载使用即可,毫无疑问,选择后者更方便

    2、压缩文件注释的中文乱码问题:zos.setComment("中文测试");这个问题在网上查了半天没看到有人解释,遂只能自己想办法解决。在自己机器上的工程创建的测试类,没有任何问题,但是在公司的项目中使用一直出现乱码,通过使用设置编码的方法(zos.setEncoding("gbk");)终于发现了问题,测试项目的编码方式为gbk,而公司项目的默认编码是utf-8,所以测试项目没问题而公司的项目中出现了问题。

    org.apache.tools.zip.ZipOutputStream默认使用项目的编码方式,理论上讲utf-8也是支持中文的,是在想不通为啥还是乱码,通过setEncoding方法改成gbk即可解决

    附上一段压缩文件的代码

     

    package com.compress;

     

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.DataInputStream;

    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 CompressEncodingTest {

     

    /**

    * @param args

    * @throws Exception

    */

    public static void main(String[] args) throws Exception {

    File f = new File("中文测试.txt");

    ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(

    new FileOutputStream("zipTest.zip"), 1024));

    zos.putNextEntry(new ZipEntry("中国人.txt"));

    DataInputStream dis = new DataInputStream(new BufferedInputStream(

    new FileInputStream(f)));

    zos.putNextEntry(new ZipEntry(f.getName()));

    int c;

    while ((c = dis.read()) != -1) {

    zos.write(c);

    }

    //To resolve the Chinese issue, gbk can work on linux(centos6.x) and windows, utf-8 doesn't work on both oszos.setEncoding("gbk");zos.setComment("中文测试");

    zos.closeEntry();

    zos.close();

    }

    }

    展开全文
  • 文件地址可以是网络地址,也可以是绝对路径的文件路径,均可实现下载多个文件并打包压缩,如果需要更改下载后的文件名可根据自己的业务自行调整代码 package org.springblade.course.util; import lombok.extern....
  • SevenZipSharp类库压缩文件的时候有没有设置字符编码的方法。 _压缩windows上查看_ ![压缩windows上查看](https://img-ask.csdn.net/upload/201907/10/1562738332_219865.jpg) android设备查看 !...
  • 使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以下载使用即可,毫无疑问,选择者更方便2、压缩文件注释的中文乱码问题:zos.s...
  • Ubuntu系统下解决压缩文件乱码问题

    千次阅读 2016-03-28 15:48:25
    转载自:... ######################################################## ...从qq邮箱下载zip文件,解压缩后发现里面文件变成乱码 在网上找到一个有效的解决方法
  • 编译opentissue时,从svn checkout出的代码,demos/glut/multibody/src/application.cpp有如下代码:l276: case ?:l411: glutAddMenuEntry("domino circel... 以前也遇到过类似的情况,当解压代码会出现这些奇怪的字
  • 解决方法:以下方法实现的前提是,mac压缩文件字体必须是win上有的字体 一:在mac上压缩为.rar结尾的压缩包(其他结尾的没有试过,有兴趣的小伙伴可以试试) 二:在win上下载2345好压软件都可以,可以设置编码为...
  • <div><p>【win10 64】我...重新下载下来也无法正常解压缩等。软件自动上传内附的TXT文件文件名和文件内容也都是乱码。求解决,阿里嘎多</p><p>该提问来源于开源项目:zaxtyson/LanZouCloud-CMD</p></div>
  • 问题描述:项目中使用的是vue框架进行开发,因为文件下载...resource请求文件流,借助Blob对象实现下载,但是仍然存在解压的问题(针对压缩文件),而 docx等文档格式主要出现的就是乱码问题。问题截图:出现以上解...
  • Java Web实现文件打包下载详见...JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩的 zip文件打开时发现中文文件名变成乱码. 解决的方法是使用apache-ant-zip.jar包(见附件)中的ZipOutputStrea
  • 项目中需要使用流下载压缩文件夹,但在压缩过程中出现一个问题:压缩后中文文件名乱码,探究其原因是使用 java.util.*中的压缩,源码中已经制定文件名编码为“UTF-8”,因此,选用org.apache.tools.*包中的压缩, ...
  • 问题描述:项目中使用的是vue框架进行开发,因为文件下载存在权限问题,所以并不能通过 a 链接的 href 属性直接赋值 URL...但是仍然存在解压的问题(针对压缩文件),而 docx等文档格式主要出现的就是乱码问题。 ...
  • 今天下载了一份zip压缩文件, 打开的时候发现中文都乱码了。 网上搜到一些解决办法,这里记录一下。 安装7zip和convmv 在命令行执行安装命令如下: sudo apt-get install p7zip-full convmv 解压design.zip ...
  • 本帖最后由 hsxnet 于 2018-2-4 16:14 编辑 关于Centos中在线解压文件名中有...从BT(Centos 7.3)中在线压缩产生的 “BT压缩文件.tar.gz”,在本地电脑解压不产生中文文件名乱码的方法: 我是使用7-zip,分二次...
  • 大神你好: 我遇到的问题是这样的:给QQ邮箱发一个压缩文件下载后发现文件变小很多,解压后发现根本不是压缩前的文件,而是别的内容(不是乱码),这是什么原因呢?
  • 原生api压缩文件后,有些软件打开压缩包,里面的压缩文件的会有中文文件名乱码问题, 比如winrar软件,但是一些国产软件没问题。 具体原因还没深入了解,后面再补充 大家可以通过apache 官网,h
  • 文件压缩的jar包使用ant的jar,一开始用的jdk本身的jar,但是出现了在本地测试没有问题,但是在客户服务器(windowsServers 2008)上出现压缩后的压缩包内的中文文件名乱码问题。经过网上查询并且测试,发现引用ant ...
  • 下载了一个zip文件,解压之后发现文件名和目录都是乱码,打开文件内容也是,可以想到这是在windows下使用中文编码压缩文件。 1. 让Ubuntu支持gbk字符集 查看系统支持的字符集 cat /usr/share/i18n/SUPPORTED 你...
  • linux删除乱码文件

    2019-10-03 12:37:22
    刚才发现自己再网站下载资料的时候压缩包可能是再windows下压缩的,再自己linux上解压出现乱码的情况,但是可以放进回收站,不过悲剧的是导致这个文件夹在回收站清理不掉,然后就有这这篇博文 经过自己的各种查询...
  • liunx下载乱码问题

    2018-03-22 17:48:50
    修改前: 压缩之前进行的编码设置: 结果:下载解压的结果乱码,是因为在测试时,判断始终是进入windows的编码,没有获取正确的编码环境 修改:一、获取输出流: 二、设置压缩包文件文件名字符编码,解决...
  • 最近,一直在研究批量下载的问题,刚开始的想法是批量选择文件后,点击下载按钮,会弹出一个路径选择框,选择路径,几个文件同时下载下来...研究了一段时间,发现自己是菜鸟,实现不鸟呀... 后来,是在没办法,...
  • 在Java项目中需要对文件夹的内容进行Zip压缩,参考了网上的代码并修复了里面的一些问题,例如:中文乱码、媒体文件解压损坏。 所使用的Jar包:ant-*.*.*.jar和log4j-*.*.*.jar,示例工程的CSDN下载地址: ...
  • 在Java项目中需要对文件夹的内容进行Zip压缩,参考了网上的代码并修复了里面的一些问题,例如:中文乱码、媒体文件解压损坏。 所使用的Jar包:ant-*.*.*.jar和log4j-*.*.*.jar,示例工程的CSDN下载地址: ...
  • ubuntu下rar文件一般用unrar进行解压,但是时常出现乱码,总结了...缺点是创建压缩文件时没有rar格式了,不过压缩成7z或者zip格式也一样。 2.到www.peazip.org下载peazip,peazip是一款功能强大的压缩和解压缩软件,
  • 今天折腾着从两台服务器之间转移数据,两台服务器的操作系统都是Linux,操 作面板都是Cpanel,还好Cpanel自带的文件管理器有压缩和解压缩功能,直接整站打包成zip,然后下载到本地,不过有些目录和文件暂且不需要 了...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 159
精华内容 63
关键字:

压缩文件下载后乱码