sun.net.ftp.FtpClient 操作FTP服务器上的文件和目录

/**
* 在当前目录下创建文件夹
* @param dir
* @return
* @throws Exception
*/
private boolean createDir(String dir){
   try{
    ftpClient.ascii();
    StringTokenizer s = new StringTokenizer(dir, "/"); //sign
    s.countTokens();
    String pathName = ftpClient.pwd();
    while(s.hasMoreElements()){
     pathName = pathName + "/" + (String) s.nextElement();
     try {
      ftpClient.sendServer("MKD " + pathName + "\r\n");
     } catch (Exception e) {
      e = null;
      return false;
     }
     ftpClient.readServerResponse();
    }
    ftpClient.binary();
    return true;
   }catch (IOException e1){
    e1.printStackTrace();
    return false;
   }
}

/**
   * ftp上传
   * 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
   * 
   * @param filename 要上传的文件(或文件夹)名
   * @return
   * @throws Exception
   */
public boolean upload(String filename){
   String newname = "";
   if(filename.indexOf("/") > -1){
    newname = filename.substring(filename.lastIndexOf("/") + 1);
   }else{
    newname = filename;
   }
   return upload(filename, newname);
}

/**
   * ftp上传
   * 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
   * 
   * @param fileName 要上传的文件(或文件夹)名
   * @param newName 服务器段要生成的文件(或文件夹)名
   * @return
   */
public boolean upload(String fileName, String newName){
   try{
    String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK"); 
    File file_in = new File(savefilename);//打开本地待长传的文件
    if(!file_in.exists()){
     throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
    }
    if(file_in.isDirectory()){
     upload(file_in.getPath(),newName,ftpClient.pwd());
    }else{
     uploadFile(file_in.getPath(),newName);
    }
    
    if(is != null){
     is.close();
    }
    if(os != null){
     os.close();
    }
    return true;
   }catch(Exception e){ 
       e.printStackTrace(); 
       System.err.println("Exception e in Ftp upload(): " + e.toString()); 
       return false;
   }finally{
    try{
     if(is != null){
      is.close();
     }
     if(os != null){ 
      os.close(); 
     }
    }catch(IOException e){
     e.printStackTrace();
    } 
   }
}

/**
   * 真正用于上传的方法
   * @param fileName
   * @param newName
   * @param path
   * @throws Exception
   */
private void upload(String fileName, String newName,String path) throws Exception{
    String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK"); 
    File file_in = new File(savefilename);//打开本地待长传的文件
    if(!file_in.exists()){
     throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
    }
    if(file_in.isDirectory()){
     if(!isDirExist(newName)){
      createDir(newName);
     }
     ftpClient.cd(newName);
     File sourceFile[] = file_in.listFiles();
     for(int i = 0; i < sourceFile.length; i++){
         if(!sourceFile[i].exists()){
        continue;
         }
         if(sourceFile[i].isDirectory()){
        this.upload(sourceFile[i].getPath(),sourceFile[i].getName(),path+"/"+newName);
         }else{
        this.uploadFile(sourceFile[i].getPath(),sourceFile[i].getName());
          }
        }
    }else{
     uploadFile(file_in.getPath(),newName);
    }
    ftpClient.cd(path);
} 
/**
* upload 上传文件
* 
* @param filename 要上传的文件名
* @param newname 上传后的新文件名
* @return -1 文件不存在 >=0 成功上传,返回文件的大小
* @throws Exception
*/
public long uploadFile(String filename, String newname) throws Exception{
   long result = 0;
   TelnetOutputStream os = null;
   FileInputStream is = null;
   try {
    java.io.File file_in = new java.io.File(filename);
    if(!file_in.exists())
     return -1;
    os = ftpClient.put(newname);
    result = file_in.length();
    is = new FileInputStream(file_in);
    byte[] bytes = new byte[1024];
    int c;
    while((c = is.read(bytes)) != -1){
     os.write(bytes, 0, c);
    }
   }finally{
    if(is != null){
     is.close();
    }
    if(os != null){
     os.close();
    }
   }
   return result;
}

/**
* 从ftp下载文件到本地
* 
* @param filename 服务器上的文件名
* @param newfilename 本地生成的文件名
* @return
* @throws Exception
*/
public long downloadFile(String filename, String newfilename){
   long result = 0;
   TelnetInputStream is = null;
   FileOutputStream os = null;
   try{
    is = ftpClient.get(filename);
    java.io.File outfile = new java.io.File(newfilename);
    os = new FileOutputStream(outfile);
    byte[] bytes = new byte[1024];
    int c;
    while ((c = is.read(bytes)) != -1) {
     os.write(bytes, 0, c);
     result = result + c;
    }
   }catch (IOException e){
    e.printStackTrace();
   }finally{
    try {
     if(is != null){
       is.close();
     }
     if(os != null){
      os.close();
     }
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   return result;
}

/**
* 取得相对于当前连接目录的某个目录下所有文件列表
* 
* @param path
* @return
*/
public List getFileList(String path){
   List list = new ArrayList();
   DataInputStream dis;
   try {
    dis = new DataInputStream(ftpClient.nameList(this.path + path));
    String filename = "";
    while((filename = dis.readLine()) != null){
     list.add(filename);
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
   return list;
}


public static void main(String[] args){
   FtpUtil ftp = new FtpUtil(ftp地址,用户名,密码);
  ftp.connectServer();
   boolean result = ftp.upload("C:/test_why", "test_why/test");
   System.out.println(result?"上传成功!":"上传失败!");
   List list = ftp.getFileList("test_why/test");
   for(int i=0;i


 

你可能感兴趣的:(JAVA)