Java 实现FTP服务实例详解
Java实现FTP服务实例详解
1、FTP简介
FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
2、实例
2.1、添加依赖
commons-fileupload commons-fileupload
2.2测试类
packagetestController; importorg.apache.commons.net.ftp.FTP; importorg.apache.commons.net.ftp.FTPClient; importorg.chenzhengyou.common.util.FtpUtil; importorg.junit.Test; importjava.io.File; importjava.io.FileInputStream; /** *@auther陈郑游 *@create2016-11-23-19:27 *@功能描述图片测试 *@公司地址 */ publicclassFtpController{ //主机地址端口号 privateStringHOSTNAME="127.0.0.1"; privateIntegerPORT=21; //本地图片路径 privateStringFilePackage="F:\\Programming_Package\\IMG_3733_1.JPG"; //用户名密码 privateStringUSERNAME="czy"; privateStringPASSWORD="czy"; /** *无工具类图片测试 **/ @Test publicvoidtestFtp()throwsException{ //创建一个FtpClient对象 FTPClientftpClient=newFTPClient(); //创建ftp连接。默认是21端口 ftpClient.connect(HOSTNAME,PORT); //登录ftp服务器,使用用户名和密码 ftpClient.login(USERNAME,PASSWORD); //上传文件。 //读取本地文件 FileInputStreaminputStream=newFileInputStream(newFile(FilePackage)); //设置上传的路径 ftpClient.changeWorkingDirectory("/myftp/images"); //修改上传文件的格式 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); //第一个参数:服务器端文档名 //第二个参数:上传文档的inputStream ftpClient.storeFile("hello.jpg",inputStream); //关闭连接 ftpClient.logout(); } }
2.3、FTP工具类上传图片
工具类
packageorg.chenzhengyou.common.util; importorg.apache.commons.net.ftp.FTP; importorg.apache.commons.net.ftp.FTPClient; importorg.apache.commons.net.ftp.FTPFile; importorg.apache.commons.net.ftp.FTPReply; importjava.io.*; /** *@auther陈郑游 *@create2016-11-23-19:27 *@功能描述ftp工具类 *@公司地址 */ publicclassFtpUtil{ /** *Description:向FTP服务器上传文件 *@paramhostFTP服务器hostname *@paramportFTP服务器端口 *@paramusernameFTP登录账号 *@parampasswordFTP登录密码 *@parambasePathFTP服务器基础目录 *@paramfilePathFTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath *@paramfilename上传到FTP服务器上的文件名 *@paraminput输入流 *@return成功返回true,否则返回false */ publicstaticbooleanuploadFile(Stringhost,intport,Stringusername, Stringpassword,StringbasePath, StringfilePath,Stringfilename,InputStreaminput){ booleanresult=false; FTPClientftp=newFTPClient(); try{ intreply; ftp.connect(host,port);//连接FTP服务器 //如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器 ftp.login(username,password);//登录 reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); returnresult; } //切换到上传目录 if(!ftp.changeWorkingDirectory(basePath+filePath)){ //如果目录不存在创建目录 String[]dirs=filePath.split("/"); StringtempPath=basePath; for(Stringdir:dirs){ if(null==dir||"".equals(dir))continue; tempPath+="/"+dir; if(!ftp.changeWorkingDirectory(tempPath)){ if(!ftp.makeDirectory(tempPath)){ returnresult; }else{ ftp.changeWorkingDirectory(tempPath); } } } } //设置上传文件的类型为二进制类型 ftp.setFileType(FTP.BINARY_FILE_TYPE); //上传文件 if(!ftp.storeFile(filename,input)){ returnresult; } input.close(); ftp.logout(); result=true; }catch(IOExceptione){ e.printStackTrace(); }finally{ if(ftp.isConnected()){ try{ ftp.disconnect(); }catch(IOExceptionioe){ } } } returnresult; } /** *Description:从FTP服务器下载文件 *@paramhostFTP服务器hostname *@paramportFTP服务器端口 *@paramusernameFTP登录账号 *@parampasswordFTP登录密码 *@paramremotePathFTP服务器上的相对路径 *@paramfileName要下载的文件名 *@paramlocalPath下载后保存到本地的路径 *@return */ publicstaticbooleandownloadFile(Stringhost,intport,Stringusername,Stringpassword,StringremotePath, StringfileName,StringlocalPath){ booleanresult=false; FTPClientftp=newFTPClient(); try{ intreply; ftp.connect(host,port); //如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器 ftp.login(username,password);//登录 reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); returnresult; } ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录 FTPFile[]fs=ftp.listFiles(); for(FTPFileff:fs){ if(ff.getName().equals(fileName)){ FilelocalFile=newFile(localPath+"/"+ff.getName()); OutputStreamis=newFileOutputStream(localFile); ftp.retrieveFile(ff.getName(),is); is.close(); } } ftp.logout(); result=true; }catch(IOExceptione){ e.printStackTrace(); }finally{ if(ftp.isConnected()){ try{ ftp.disconnect(); }catch(IOExceptionioe){ } } } returnresult; } }
实现类
packagetestController; importorg.apache.commons.net.ftp.FTP; importorg.apache.commons.net.ftp.FTPClient; importorg.chenzhengyou.common.util.FtpUtil; importorg.junit.Test; importjava.io.File; importjava.io.FileInputStream; /** *@auther陈郑游 *@create2016-11-23-19:27 *@功能描述图片测试 *@公司地址 */ publicclassFtpController{ //主机地址端口号 privateStringHOSTNAME="127.0.0.1"; privateIntegerPORT=21; //本地图片路径 privateStringFilePackage="F:\\Programming_Package\\IMG_3733_1.JPG"; //用户名密码 privateStringUSERNAME="czy"; privateStringPASSWORD="czy"; /** *有工具类测试 **/ @Test publicvoidtestUtil()throwsException{ FileInputStreaminputStream=newFileInputStream(newFile("F:\\Programming_Package\\IMG_3733_1.JPG")); FtpUtil.uploadFile(HOSTNAME,PORT,USERNAME,PASSWORD,"/myftp/images","/2016/11/24","hello.jpg",inputStream); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!