遍历ftp,文件名中文乱码

问题描述

最近做的项目中需要一个提取ftp信息一个小程序,程序建立在apachecomments-net的基础之上。ftp服务器程序师FileZilla。控制连接要用iso-8859-1的编码才能让服务器识别命令,而在comments-net的数据处理里面,数据连接的编码是调用控制连接的。这样过来,中文就成为乱码了,恳请高人指教!FileZilla已经在附件中,comments-net,可以再【http://www.dirsphere.com/apachemirror/commons/net/binaries/commons-net-2.0.zip】下载。下面是测试程序的源码:importjava.io.IOException;importjava.util.Date;importorg.apache.commons.net.ftp.FTP;importorg.apache.commons.net.ftp.FTPClient;importorg.apache.commons.net.ftp.FTPFile;importorg.apache.commons.net.ftp.FTPReply;publicclassTest{privatestaticFTPClientftp;privatestaticStringhost="222.22.7.215";privatestaticStringuser="anonymous";privatestaticStringpass="";privatestaticintrecNum=0;publicstaticvoidmain(String[]args){ftp=newFTPClient();booleanerror=false;try{intreply;ftp.connect(host);System.out.println("Connectedto"+host);System.out.print(ftp.getReplyString());//Afterconnectionattempt,youshouldcheckthereplycodeto//verify//success.reply=ftp.getReplyCode();//ftp.setControlEncoding("UTF-8");ftp.setFileTransferMode(FTP.ASCII_FILE_TYPE);if(!FTPReply.isPositiveCompletion(reply)){ftp.disconnect();System.err.println("FTPserverrefusedconnection.");System.exit(1);}ftp.login(user,pass);//transferfiles/**FTPFile[]files=ftp.listFiles();for(inti=0;i<*files.length;i++){System.out.println(files[i].getName());**}*/DatestartTime=newDate();traverse(ftp,ftp.printWorkingDirectory());DateendTime=newDate();System.out.println("遍历耗时"+String.valueOf(endTime.getTime()-startTime.getTime()/60000.0)+"分钟");System.out.println("共有文件数:"+recNum+"个");/**String[]names=ftp.listNames();for(Stringstring:names){*System.out.println(string);}*System.out.println(ftp.printWorkingDirectory());*System.out.println(ftp.getBufferSize());*/ftp.logout();}catch(IOExceptione){error=true;e.printStackTrace();}finally{if(ftp.isConnected()){try{ftp.disconnect();}catch(IOExceptionioe){//donothing}}System.exit(error?1:0);}}publicstaticvoidtraverse(FTPClientclient,Stringpath){Stringprefix="";try{FTPFile[]files=client.listFiles(path);for(inti=0;i<files.length;i++){if(files[i].getName().equals(".")||files[i].getName().equals("..")){continue;}elseif(files[i].isDirectory()){StringtempDir=client.printWorkingDirectory()+"/"+files[i].getName();//tempDir=newString(tempDir.getBytes(),"UTF-8");//System.out.println("Directory:"+tempDir);//System.out.println(client.changeWorkingDirectory(tempDir))//;client.changeWorkingDirectory(tempDir);traverse(client,tempDir);prefix+=client.printWorkingDirectory();client.changeToParentDirectory();}else{Stringtemp=client.printWorkingDirectory();if(temp.equals("/")){recNum++;System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");System.out.println("URL:"+temp+newString(files[i].getName().getBytes()));System.out.println(files[i].getSize()/1000000.0+"MB");System.out.println(files[i].getTimestamp().getTime());System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");System.out.println("rnrn");}else{recNum++;System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");System.out.println("URL:"+temp+"/"+newString(files[i].getName().getBytes()));System.out.println(files[i].getSize()/1000000.0+"MB");System.out.println(files[i].getTimestamp().getTime());System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");System.out.println("rnrn");}}}}catch(IOExceptione){e.printStackTrace();}}}

解决方案

解决方案二:
up,mark,学习,先标记上。
解决方案三:
system.out.println("URL:"+temp+newString(files[i].getName().getBytes()));在取得文件名称后,要重新解码,system.out.println("URL:"+temp+newString(files[i].getName().getBytes("GBK"),"iso-8859-1")));但是前提条件是,在遍历文件名的时候,使用iso-8859-1没有丢失中文信息,如果已经丢失,是没有办法取回来的。楼主试试。
解决方案四:
谢谢,我已经找到解决的办法了,谢谢你!
解决方案五:
解决方法分享一下啊!
解决方案六:
解决方法就在主函数publicstaticvoidmain(String[]args){ftp=newFTPClient();ftp.setControlEncoding("GBK");//添上这句设置编码就没中文乱码了

时间: 2024-09-22 03:39:10

遍历ftp,文件名中文乱码的相关文章

zip压缩解决文件名中文乱码问题

使用jdk自带的zip工具类Java.util.zip.ZipEntry,java.util.zip.ZipFile,java.util.zip.ZipInputStream,java.util.zip.ZipOutputStream 进行zip压缩时,没法解决文件名中文乱码问题 这里使用apache 旗下的commons-compress 库,官网是:http://commons.apache.org/proper/commons-compress/download_compress.cgi

hadoop删除文件报错“NullPointException” 文件路径中文件名中文乱码

问题描述 hadoop删除文件报错"NullPointException" 文件路径中文件名中文乱码 大家好,我想请教一下关于hadoop文件删除的问题,希望有大牛在空闲之余给予指导. 问题描述:之前别的用户通过hadoop上传了文件,由于编码问题,之前人家上传的文件名读取出来 为中文乱码,例如:fileUrl==========hdfs://localhost:9000/user11417591508779_???????.docx, 现在我想删除这些乱码文件,由于文件路径中包含中文

PHP Header下载文件在IE文件名中文乱码问题

解决方案一(我的页面是utf-8编码):  代码如下 复制代码     $filename = "中文.txt";     $ua = $_SERVER["HTTP_USER_AGENT"];     $encoded_filename = urlencode($filename);     $encoded_filename = str_replace("+", "%20", $encoded_filename);    

zip压缩解决文件名中文乱码问题(2)

使用apache旗下的commons-compress 压缩和解压zip文件 可以参考我的前一篇博客:http://hw1287789687.iteye.com/blog/1976309 以下是我封装的一个工具类,专门负责zip的压缩和解压  CompressZipUtil: Java代码   package com.common.util;      import java.io.File;   import java.io.FileInputStream;   import java.io.

php遍历windows下中文目录下的所有文件名

有时需要遍历windows下中文目录下的所有的文件名,使用utf-8编码的文件有时会出现乱码,并且不能成功的执行, 这时需要对文件的编码进行一下转换,使用scandir这个函数的时候会连同目录一下列出来,大家可以通过is_dir()这个函数来 做一个判断,我使用目录下所的文件都有扩展所以只做了一个简单的判断 代码如下  <? $dir ="e:\\PHPnow-1.5.6\\htdocs_96\\目录文件\\"; $dir=iconv("utf-8",&quo

Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题_java

废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String path,String filename,InputStream input) { boolean success=false; FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp

跨浏览器PHP下载文件名中的中文乱码问题解决方法

 这篇文章主要介绍了跨浏览器PHP下载文件名中的中文乱码问题解决方法,涉及php针对中文编码的转码技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了跨浏览器PHP下载文件名中的中文乱码问题解决方法.分享给大家供大家参考.具体如下:   代码如下: <?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode(

跨浏览器PHP下载文件名中的中文乱码问题解决方法_php技巧

本文实例讲述了跨浏览器PHP下载文件名中的中文乱码问题解决方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20",

采用AjaxFileUpload实现文件上传,文件上传成功但得到的中文文件名为乱码。

问题描述 采用AjaxFileUpload实现文件上传,文件上传成功但得到的中文文件名为乱码. 采用Jquery插件AjaxFileUpload实现文件上传,文件上传成功但得到的中文文件名为乱码.后端采用ssh框架实现,试了试采用普通表单上传是没有问题的,由此断定问题出在Jquery插件上,可能插件在编码上没有考虑充分,于是研究了下js代码,但还是不知道要改哪里.网上也有人遇到类似问题,但没有人做到明确的回答.上传文件后不想页面整体刷新故采用Ajax实现上传,到底该如何解决呢,希望高手作答? 解