您好,欢迎访问三七文档
JAVA中的FtpClient与FTPClient,并实现jsp页面下载ftp服务器上的文件这段时间一直在研究Java如何访问Ftp,搞了一段时间了,也有一定的了解。故此记录一下。ftp和FTP我个人觉得FTP更符合我们程序员的口味,不管是方法命名还是API的详细与否,或者是开发平台的问题,FTP毕竟是Apache的东西,做的就是不错。其实web开发中一般都会涉及到编码问题,所以web上传下载一定会有中文乱码的问题存在,而FTP对中文的支持比ftp要好多了。使用ftpClient不需要导入其它jar包,只要你使用java语言开发就行了,而使用FTPClient需要使用commons-net-1.4.1.jar和jakarta-oro-2.0.8.jar,当然jar版本随便你自己。话不多说,上代码!FTP服务器的文件目录结构图:一、FtpClientFtpClient是属于JDK的包下面的类,但是jdkapi并没有对此作介绍,在中文支持上面也有一定的限制。本段代码中的Ftp服务器的IP地址,用户名和密码均通过SystemConfig.properties文档获取Ftp_client.java[java]viewplaincopy1.packagecom.iodn.util;2.3.importjava.io.ByteArrayOutputStream;4.importjava.io.File;5.importjava.io.FileInputStream;6.importjava.io.FileOutputStream;7.importjava.io.IOException;8.importjava.util.ResourceBundle;9.importsun.net.TelnetInputStream;10.importsun.net.TelnetOutputStream;11.importsun.net.ftp.FtpClient;12.13.publicclassFtp_client{14.15.//FTP客户端16.privateFtpClientftpClient;17.privateResourceBundleres=null;18./**19.*连接FTP服务器20.*@parampath指定远程服务器上的路径21.*/22.publicFtp_client(Stringpath){23.24.res=ResourceBundle.getBundle(com.iodn.util.SystemConfig);//获取配置文件propeties文档中的数据25.try{26.ftpClient=newFtpClient(res.getString(Properties.ftpHostIp));//如果不想使用配置文件即可将数据写死(如:192.168.1.10)27.ftpClient.login(res.getString(Properties.ftpUser),res.getString(Properties.ftpPassword));//Ftp服务器用户名和密码28.ftpClient.binary();29.System.out.println(LoginSuccess!);30.if(path.length()!=0){31.//把远程系统上的目录切换到参数path所指定的目录(可不用设置,上传下载删除时加Ftp中的全路径即可)32.ftpClient.cd(path);33.}34.}catch(Exceptione){35.e.printStackTrace();36.}37.}38.39./**40.*上传文件41.*@paramremoteFile42.*@paramlocalFile43.*/44.publicbooleanupload(StringremoteFile,StringlocalFile){45.booleanbool=false;46.TelnetOutputStreamos=null;47.FileInputStreamis=null;48.try{49.os=ftpClient.put(remoteFile);50.is=newFileInputStream(newFile(localFile));51.byte[]b=newbyte[1024];52.intc;53.while((c=is.read(b))!=-1){54.os.write(b,0,c);55.}56.bool=true;57.}catch(Exceptione){58.e.printStackTrace();59.System.out.println(上传文件失败!请检查系统FTP设置,并确认FTP服务启动);60.}finally{61.if(is!=null){62.try{63.is.close();64.}catch(IOExceptione){65.e.printStackTrace();66.}67.}68.if(os!=null){69.try{70.os.close();71.}catch(IOExceptione){72.e.printStackTrace();73.}74.}75.closeConnect();76.}77.returnbool;78.}79./**80.*下载文件81.*@paramremoteFile远程文件路径(服务器端)82.*@paramlocalFile本地文件路径(客户端)83.*/84.85.publicvoiddownload(StringremoteFile,StringlocalFile){86.TelnetInputStreamis=null;87.FileOutputStreamos=null;88.try{89.//获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。90.is=ftpClient.get(remoteFile);91.Filefile=newFile(localFile);92.os=newFileOutputStream(file);93.byte[]b=newbyte[1024];94.intc;95.while((c=is.read(b))!=-1){96.os.write(b,0,c);97.}98.}catch(Exceptione){99.e.printStackTrace();100.System.out.println(下载文件失败!请检查系统FTP设置,并确认FTP服务启动);101.}finally{102.if(is!=null){103.try{104.is.close();105.}catch(IOExceptione){106.e.printStackTrace();107.}108.}109.if(os!=null){110.try{111.os.close();112.}catch(IOExceptione){113.e.printStackTrace();114.}115.}116.closeConnect();117.118.}119.}120.121.//删除文件至FTP通用方法122.123.publicvoiddeleteFileFtp(StringfileName){124.try{125.ftpClient.sendServer(dele+fileName+\r\n);126.}catch(Exceptione){127.System.out.println(删除文件失败!请检查系统FTP设置,并确认FTP服务启动);128.}finally{129.closeConnect();//关闭FTP连接130.}131.132.}133.134./**135.*Ftp下载返回byte[]字节数组供前端下载使用136.*@paramSourceFileName137.*@return138.*@throwsException139.*/140.publicbyte[]downFileByte(StringSourceFileName)throwsException{141.//ftpClient.binary();//一定要使用二进制模式142.TelnetInputStreamftpIn=ftpClient.get(SourceFileName);143.ByteArrayOutputStreambyteOut=newByteArrayOutputStream();144.byte[]buf=newbyte[204800];145.intbufsize=0;146.while((bufsize=ftpIn.read(buf,0,buf.length))!=-1){147.byteOut.write(buf,0,bufsize);148.}149.byte[]return_arraybyte=byteOut.toByteArray();150.byteOut.close();151.ftpIn.close();152.returnreturn_arraybyte;153.}154./**155.*关闭FTP连接156.*/157.publicvoidcloseConnect(){158.try{159.ftpClient.closeServer();160.}catch(Exceptione){161.e.printStackTrace();162.}163.}164.165.publicstaticvoidmain(String[]args)throwsException{166.Ftp_clienttest=newFtp_client(/zhou);167.//test.deleteFileFtp(20140412.zip);168.//test.upload(20141201.xls,E:\\201412.xls);//上传文件169.//test.download(321.txt,E:\\111.txt);//下载170.test.downFileByte(321.txt);171.172.}173.174.175.176.}二、FTPClientFTPClient是Apache包下面的类,主要依靠commons-net-1.4.1.jar,支持中文上传下载。本段代码中的Ftp服务器的IP地址,用户名和密码均通过SystemConfig.properties文档获取FTPClientHelper.java[java]viewplaincopy1.packagecom.iodn.util;2.3.importjava.io.ByteArrayOutputStream;4.importjava.io.File;5.importjava.io.FileInputStream;6.importjava.io.FileOutputStream;7.importjava.io.InputStream;8.importjava.io.OutputStream;9.importjava.util.Date;10.importjava.util.ResourceBundle;11.12.importorg.apache.commons.net.ftp.FTPClient;13.importorg.apache.commons.net.ftp.FTPClientConfig;14.importorg.apache.commons.net.ftp.FTPFile;15.importorg.apache.commons.net.ftp.FTPReply;16.17.publicclassFTPClientHelper{18.19.//FTP客户端20.privateFTPClientftpClient;21.privateResourceB
本文标题:JAVA中的FtpClient与FTPClient,并实现jsp页面ftp服务器上的文件
链接地址:https://www.777doc.com/doc-2880629 .html