Java实现FTP文件的上传和下载功能的实例代码
FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
首先下载了Serv-U将自己的电脑设置为了FTP文件服务器,方便操作。
1.FTP文件的下载(从FTP服务器下载到本机)
importjava.io.File; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; importorg.apache.commons.net.ftp.FTP; importorg.apache.commons.net.ftp.FTPClient; importorg.apache.commons.net.ftp.FTPFile; importorg.apache.commons.net.ftp.FTPReply; publicclassFtpApche{ privatestaticFTPClientftpClient=newFTPClient(); privatestaticStringencoding=System.getProperty("file.encoding"); /** *Description:从FTP服务器下载文件 * *@Version1.0 *@paramurl *FTP服务器hostname *@paramport *FTP服务器端口 *@paramusername *FTP登录账号 *@parampassword *FTP登录密码 *@paramremotePath *FTP服务器上的相对路径 *@paramfileName *要下载的文件名 *@paramlocalPath *下载后保存到本地的路径 *@return */ publicstaticbooleandownFile(Stringurl,intport,Stringusername, Stringpassword,StringremotePath,StringfileName, StringlocalPath){ booleanresult=false; try{ intreply; ftpClient.setControlEncoding(encoding); /* *为了上传和下载中文文件,有些地方建议使用以下两句代替 *newString(remotePath.getBytes(encoding),"iso-8859-1")转码。 *经过测试,通不过。 */ //FTPClientConfigconf=newFTPClientConfig(FTPClientConfig.SYST_NT); //conf.setServerLanguageCode("zh"); ftpClient.connect(url,port); //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftpClient.login(username,password);//登录 //设置文件传输类型为二进制 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //获取ftp登录应答代码 reply=ftpClient.getReplyCode(); //验证是否登陆成功 if(!FTPReply.isPositiveCompletion(reply)){ ftpClient.disconnect(); System.err.println("FTPserverrefusedconnection."); returnresult; } //转移到FTP服务器目录至指定的目录下 ftpClient.changeWorkingDirectory(newString(remotePath.getBytes(encoding),"iso-8859-1")); //获取文件列表 FTPFile[]fs=ftpClient.listFiles(); for(FTPFileff:fs){ if(ff.getName().equals(fileName)){ FilelocalFile=newFile(localPath+"/"+ff.getName()); OutputStreamis=newFileOutputStream(localFile); ftpClient.retrieveFile(ff.getName(),is); is.close(); } } ftpClient.logout(); result=true; }catch(IOExceptione){ e.printStackTrace(); }finally{ if(ftpClient.isConnected()){ try{ ftpClient.disconnect(); }catch(IOExceptionioe){ } } } returnresult; } /** *将FTP服务器上文件下载到本地 * */ publicvoidtestDownFile(){ try{ booleanflag=downFile("10.0.0.102",21,"admin", "123456","/","ip.txt","E:/"); System.out.println(flag); }catch(Exceptione){ e.printStackTrace(); } } publicstaticvoidmain(String[]args){ FtpApchefa=newFtpApche(); fa.testDownFile(); } }
2.FTP文件的上传(从本机上传到FTP服务器)
importjava.io.File; importjava.io.FileInputStream; importorg.apache.commons.net.ftp.FTPClient; importorg.apache.commons.net.ftp.FTPReply; publicclassFTPTest_05{ privateFTPClientftp; /** * *@parampath上传到ftp服务器哪个路径下 *@paramaddr地址 *@paramport端口号 *@paramusername用户名 *@parampassword密码 *@return *@throwsException */ privatebooleanconnect(Stringpath,Stringaddr,intport,Stringusername,Stringpassword)throwsException{ booleanresult=false; ftp=newFTPClient(); intreply; ftp.connect(addr,port); ftp.login(username,password); ftp.setFileType(FTPClient.BINARY_FILE_TYPE); reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); returnresult; } ftp.changeWorkingDirectory(path); result=true; returnresult; } /** * *@paramfile上传的文件或文件夹 *@throwsException */ privatevoidupload(Filefile)throwsException{ if(file.isDirectory()){ ftp.makeDirectory(file.getName()); ftp.changeWorkingDirectory(file.getName()); String[]files=file.list(); for(inti=0;i<files.length;i++){ Filefile1=newFile(file.getPath()+"\\"+files[i]); if(file1.isDirectory()){ upload(file1); ftp.changeToParentDirectory(); }else{ Filefile2=newFile(file.getPath()+"\\"+files[i]); FileInputStreaminput=newFileInputStream(file2); ftp.storeFile(file2.getName(),input); input.close(); } } }else{ Filefile2=newFile(file.getPath()); FileInputStreaminput=newFileInputStream(file2); ftp.storeFile(file2.getName(),input); input.close(); } } publicstaticvoidmain(String[]args)throwsException{ FTPTest_05t=newFTPTest_05(); booleanconnFlag=t.connect("/","10.0.0.105",21,"ls","123456"); System.out.println("connFlag:"+connFlag); Filefile=newFile("D:\\test02");//本机被传文件的地址 System.out.println("file:"+file); t.upload(file); System.out.println("upload:"+"ok"); } }
以上所述是小编给大家介绍的Java实现FTP文件的上传和下载功能的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!