这是实习期间第二次写随笔,通过这种方式来总结自己这段时间所学的东西,希望能帮助到。
FTP是文件传输协议,用于Internet上的控制文件的双向传输。也就是说,eclipse中的程序可以将本地的文件以及远程的文件相互连通,可以上传也可以下载。
就以上传为例,这里写部分代码,
public UploadStatus upload(FTPClient ftpclient,String localFilePath,String remoteFilePath) throws IOException{
//必须要写的,这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数
//据,但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞。
ftpclient.enterLocalPassiveMode();
ftpclient.setFileType(FTP.BINARY_FILE_TYPE);//设定二进制传输
ftpclient.setControlEncoding(DEFAULT_REMOTE_CHARSET);
UploadStatus result;//上传状态对象
String remoteFileName = remoteFilepath;//远程文件路径
//分解远程路径,获得完整路径
if(remoteFileName.contains("/"){
remoteFileName = remoteFilePath.subString(remoteFilePath.lastIndexOf("/")+1);
}
FTPFile[] files = ftpClient.listFiles(new String(remoteFileName.getBytes(DEFAULT_REMOTE_CHARSET),DAFAULT_LOCAL_CHARSET));//
if(files.length==1){
long remotesize = file[0].getSize();
File f = new File(localFilePath);
long localsize = f.getSize();
if(remotesize == localsize){
//文件已经在本地存在,返回一个值
}else if( remotesize>localsize){
//文件不用上传,返回一个值
}
//(String,File,FTPClient,long)上传文件
result = uploadFile(remoteFileName,f,ftpClient,remoteSize);
}
//上传失败,则删除远程文件后再上传一遍
if(result==UploadStatus.Upload_From_Break_Failed){
if(!ftpClient.deleteFile(remoteFileName)){
return UploadStatus.Delete_Remote_Failed;
}
result = uploadFile(remoteFilePath,f,fileClient,0);
}
}else{
//uploadFile方法不写了
result = uploadFile(remoteFileName.noew file(localFilePath,ftpClient,0);
}
return result;
}