java通过ftp上传、下载文件,遍历文件目录

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.catalina.tribes.util.Logs;
 
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
 
public class DownFileForFtp {
     FtpClient ftpClient;
     private String server = "ip" ;
     private int port = 21 ;
     private String userName = "usn" ;
     private String userPassword = "pwd" ;
 
     /**
      * 链接到服务器
      *
      * @return
      */
     public boolean open() {
         if (ftpClient != null && ftpClient.serverIsOpen())
             return true ;
         try {
             ftpClient = new FtpClient();
             ftpClient.openServer(server, port);
             ftpClient.login(userName, userPassword);
             ftpClient.binary();
             return true ;
         } catch (Exception e) {
             e.printStackTrace();
             ftpClient = null ;
             return false ;
         }
     }
 
     public boolean cd(String dir) {
         boolean f = false ;
         try {
             ftpClient.cd(dir);
         } catch (IOException e) {
             //Logs.error(e.toString());
             return f;
         }
         return true ;
     }
 
     /**
      * 上传文件到FTP服务器
      *
      * @param localPathAndFileName
      *            本地文件目录和文件名
      * @param ftpFileName
      *            上传后的文件名
      * @param ftpDirectory
      *            FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录
      * @throws Exception
      */
     public boolean upload(String localDirectoryAndFileName, String ftpFileName,
             String ftpDirectory) throws Exception {
         if (!open())
             return false ;
         FileInputStream is = null ;
         TelnetOutputStream os = null ;
         try {
             char ch = ' ' ;
             if (ftpDirectory.length() > 0 )
                 ch = ftpDirectory.charAt(ftpDirectory.length() - 1 );
             for (; ch == '/' || ch == '\\' ; ch = ftpDirectory
                     .charAt(ftpDirectory.length() - 1 ))
                 ftpDirectory = ftpDirectory.substring( 0 ,
                         ftpDirectory.length() - 1 );
 
             int slashIndex = ftpDirectory.indexOf( 47 );
             int backslashIndex = ftpDirectory.indexOf( 92 );
             int index = slashIndex;
             String dirall = ftpDirectory;
             if (backslashIndex != - 1 && (index == - 1 || index > backslashIndex))
                 index = backslashIndex;
             String directory = "" ;
             while (index != - 1 ) {
                 if (index > 0 ) {
                     String dir = dirall.substring( 0 , index);
                     directory = directory + "/" + dir;
                     ftpClient.sendServer( "XMKD " + directory + "\r\n" );
                     ftpClient.readServerResponse();
                 }
                 dirall = dirall.substring(index + 1 );
                 slashIndex = dirall.indexOf( 47 );
                 backslashIndex = dirall.indexOf( 92 );
                 index = slashIndex;
                 if (backslashIndex != - 1
                         && (index == - 1 || index > backslashIndex))
                     index = backslashIndex;
             }
             ftpClient.sendServer( "XMKD " + ftpDirectory + "\r\n" );
             ftpClient.readServerResponse();
 
             os = ftpClient.put(ftpDirectory + "/" + ftpFileName);
             File file_in = new File(localDirectoryAndFileName);
             is = new FileInputStream(file_in);
             byte bytes[] = new byte [ 1024 ];
             int i;
             while ((i = is.read(bytes)) != - 1 )
                 os.write(bytes, 0 , i);
             // 清理垃圾
 
             return true ;
         } catch (Exception e) {
             e.printStackTrace();
             return false ;
         } finally {
             if (is != null )
                 is.close();
             if (os != null )
                 os.close();
         }
     }
 
     /**
      * 从FTP服务器上下载文件并返回下载文件长度
      *
      * @param ftpDirectoryAndFileName
      * @param localDirectoryAndFileName
      * @return
      * @throws Exception
      */
     public long download(String ftpDirectoryAndFileName,
             String localDirectoryAndFileName) throws Exception {
         long result = 0 ;
         if (!open())
             return result;
         TelnetInputStream is = null ;
         FileOutputStream os = null ;
         try {
             is = ftpClient.get(ftpDirectoryAndFileName);
             java.io.File outfile = new java.io.File(localDirectoryAndFileName);
             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 (Exception e) {
             throw e;
         } finally {
             if (is != null )
                 is.close();
             if (os != null )
                 os.close();
 
         }
         return result;
     }
 
     /**
      * 返回FTP目录下的文件列表
      *
      * @param ftpDirectory
      * @return
      */
     public List<String> getFileNameList(String ftpDirectory) {
         List<String> list = new ArrayList<String>();
         if (!open())
             return list;
         try {
             DataInputStream dis = new DataInputStream(
                     ftpClient.nameList(ftpDirectory));
             String filename = "" ;
             while ((filename = dis.readLine()) != null ) {
                 list.add(filename);
                 System.out.println(filename);
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
         return list;
     }
 
     /**
      * 删除FTP上的文件
      *
      * @param ftpDirAndFileName
      */
     public boolean deleteFile(String ftpDirAndFileName) {
         if (!open())
             return false ;
         ftpClient.sendServer( "DELE " + ftpDirAndFileName + "\r\n" );
         return true ;
     }
 
     /**
      * 删除FTP目录
      *
      * @param ftpDirectory
      */
     public boolean deleteDirectory(String ftpDirectory) {
         if (!open())
             return false ;
         ftpClient.sendServer( "XRMD " + ftpDirectory + "\r\n" );
         return true ;
     }
 
     /**
      * 关闭链接
      */
     public void close() {
         try {
             if (ftpClient != null && ftpClient.serverIsOpen())
                 ftpClient.closeServer();
         } catch (Exception e) {
 
         }
     }
     
     public static void main(String []args) throws Exception{
         DownFileForFtp df = new DownFileForFtp();
         df.getFileNameList( "E:\\uploadfiles\\cat" );
         df.download( "E:\\uploadfiles\\cat\\2012-03-29.11.00.00.012.xml" , "F:\\temp\\ftpdown\\2012-03-29.11.00.00.012.xml" );
 
     }
     
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值