edtftpj:下载
需求描述:把WEB服务器上一个目录中所有的文件上传到指定ftp服务器的某个目录中。分析: 在edtftpj中有个FTPClient类,此类可以实现ftp的上传。用到的几个函数说明如下: 1、构造函数 FTPClient(ftp服务器,ftp端口) 2、login(ftp登录账号,ftp密码) //登录ftp服务器 3、chdir("文件夹名") //进入ftp上的某个目录,类似DOS的cd命令 4、setType(FTPTransferType.BINARY) //设置传输类型 5、mkdir("文件夹名") //在ftp当前目录下新建一个目录问题: 利用此组件在测试过程中,发现当上传含有中文的文件名时会失败(FTPClient认为它不是一个文件,奇怪)!完整程序:package yhp.test.util;import java.io.File;
import com.enterprisedt.net.ftp.FTPClient;
import com.enterprisedt.net.ftp.FTPTransferType;/**
* @author Administrator * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */public class FTPUpload {private String ftpServer;
private String ftpPort;
private String ftpUserName;
private String ftpPassword;
private FTPClient ftpClient;
private boolean isLogin = false;
public FTPUpload(String pFtpServer, String pFtpPort, String pFtpUserName,
String pFtpPassword) throws Exception { this.ftpServer = pFtpServer; if(pFtpPort.trim().equals("")) this.ftpPort="21"; else this.ftpPort = pFtpPort; if(pFtpUserName.trim().equals("")) this.ftpUserName ="Anonymous"; else this.ftpUserName = pFtpUserName; this.ftpPassword = pFtpPassword; try { ftpClient = new FTPClient(ftpServer, Integer.parseInt(ftpPort)); ftpClient.login(ftpUserName, ftpPassword); ftpClient.chdir("\\");//在有的ftp服务器运行会出错,用ftpClient.chdir("/")又可以了 isLogin = true; } catch (Exception e) { throw new Exception(e.getMessage()); } }//上传指定文件夹到ftp服务器上
public String uploadFolder(String folderName,String ftpPath)throws Exception{ if (isLogin) { String strMsg=""; try{ File file=new File(folderName); if(file.isDirectory()){ ftpClient.chdir("\\"); ftpClient.setType(FTPTransferType.BINARY); if (checkFolderIsExist(ftpPath)) { ftpClient.chdir(ftpPath); } else { createFolder(ftpPath); } if(!checkFolderIsExist(file.getName())){ ftpClient.mkdir(file.getName()); } ftpClient.chdir(file.getName()); ftpPath=ftpPath+"\\"+file.getName(); File[] files=file.listFiles(); for(int i=0;i<files.length;i++){ if(files[i].isDirectory()){ uploadFolder(files[i].getPath(),ftpPath); }else{ if(files[i].isFile()){ try{ ftpClient.put(files[i].getPath(),files[i].getName()); }catch(Exception ee){ strMsg+="upload file<<:"+files[i].getPath()+">> error!Message:"+ee.getMessage()+"\r\n"; } } } } if(!strMsg.equals("")){ throw new Exception(strMsg); } }else{ throw new Exception(folderName+" is not a folder'name!"); } }catch(Exception e){ strMsg+=e.getMessage()+"\r\n"; } return strMsg; } else { throw new Exception("you didnot login remote ftp server!"); } } //把指定目录下所有的文件上传到ftp服务器上 public void uploadAllFilesInFolder(String folderName,String ftpPath)throws Exception{ if (isLogin) { String strMsg=""; try{ File file=new File(folderName); if(file.isDirectory()){ ftpClient.chdir("\\"); ftpClient.setType(FTPTransferType.BINARY); if (checkFolderIsExist(ftpPath)) { ftpClient.chdir(ftpPath); } else { createFolder(ftpPath); } File[] files=file.listFiles(); for(int i=0;i<files.length;i++){ if(files[i].isFile()){ try{ ftpClient.put(files[i].getPath(),files[i].getName()); }catch(Exception ee){ strMsg+="upload file<<:"+files[i].getPath()+">> error!Message:"+ee.getMessage()+"\r\n"; } } } }else{ throw new Exception(folderName+" is not a folder'name!"); } }catch(Exception e){ throw new Exception(e.getMessage()); } } else { throw new Exception("you didnot login remote ftp server!"); } } //上传指定文件到ftp服务器上 public void uploadFile(String clientFileName, String ftpPath) throws Exception { if (isLogin) { try { //获取文件名 String filename = ""; int index = clientFileName.lastIndexOf("\\"); filename = clientFileName.substring(index + 1); ftpClient.chdir("\\"); ftpClient.setType(FTPTransferType.BINARY); if (checkFolderIsExist(ftpPath)) { ftpClient.chdir(ftpPath); } else { createFolder(ftpPath); } ftpClient.put(clientFileName, filename); } catch (Exception ex) { throw new Exception(ex.getMessage()); } } else { throw new Exception("you didnot login remote ftp server!"); } }// 检查FTP服务器上文件夹是否存在
public boolean checkFolderIsExist(String pFolder) throws Exception { if (isLogin) { String folder=pFolder.trim(); if(folder.startsWith("\\")) folder=folder.substring(1); if(folder.endsWith("\\")) folder=folder.substring(0,folder.length()-1); String strLayer=".."; if(folder.indexOf("\\")>0){ String[] folders=folder.split("\\\\"); for(int i=1;i<folders.length;i++){ strLayer+=","; } } boolean result=false; try { ftpClient.chdir(folder); ftpClient.chdir(strLayer); result=true; } catch (Exception ex) { result=false; } return result; } else { throw new Exception("you didnot login remote ftp server!"); } }//创建远程FTP服务器文件夹
public void createFolder(String pFolder) throws Exception { if (isLogin) { if (checkFolderIsExist(pFolder) == false) { try { String path = ""; ftpClient.chdir("\\"); String[] folders = pFolder.split("\\\\"); for (int i = 0; i < folders.length; i++) { try { ftpClient.chdir(folders[i]); } catch (Exception ex) { ftpClient.mkdir(folders[i]); ftpClient.chdir(folders[i]); } } } catch (Exception ex) { throw new Exception(ex.getMessage()); } } } else { throw new Exception("you didnot login remote ftp server!"); } }public static void main(String[] args) {
try{ FTPUpload ftp=new FTPUpload("192.168.0.176","21","",""); ftp.uploadAllFilesInFolder("D:\\my driver\\Sony DSC","yhp");}catch(Exception e){
System.out.println(e.getMessage()); } }}