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文件的上传和下载功能的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短