<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 108,comments - 56,trackbacks - 0
         最近寫了一個FTP客服端的程序,可以實現上傳,下載,列出文件,刪除文件,重命名文件操作。

         SUN也提供了FTP操作的包,但是官方建議不要使用,而且沒有API文檔。另外IBM和APACHE也提供了相應的FTP包,APACHE的包功能比較強大,IBM的沒有用過,不知道怎樣。

         我把我的代碼貼出來,希望和大家一起交流。
    package woxingwosu;

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Comparator;
    import java.util.Properties;
    import java.util.TreeSet;

    import org.apache.commons.io.FileUtils;
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPClientConfig;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;

    /**
     * 其實JDK里面也有支持FTP操作的包【jre/lib下的rt.jar】,但是SUN的DOC里面并沒有提供相應文檔,
     * 因為這里面的包,不被官方支持,建議不要使用。我們可以使用第三方提供的包apache.commons。
     * apache.commons的包,都有文檔,方便使用
     * 另外IBM也有提供一個ftp包,我沒有用過,有興趣的可以去研究一下
     * @commons-net:
    http://apache.mirror.phpchina.com/commons/net/binaries/commons-net-1.4.1.zip
     * @jakarta-oro:
    http://mirror.vmmatrix.net/apache/jakarta/oro/source/jakarta-oro-2.0.8.zip 
     * @commons-io:
    http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.3.2-bin.zip
     * 
    @author 我行我素
     * @2007-08-03
     
    */
    public class MiniFtp {
        
    private static String username;
        
    private static String password;
        
    private static String ip;
        
    private static int port;
        
    private static Properties property=null;//配置
        private static String configFile;//配置文件的路徑名
        
        
    private static FTPClient ftpClient=null;
        
    private static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm");
        
        
    private static final String [] FILE_TYPES={"文件","目錄","符號鏈接","未知類型"};
        
        
    public static void main(String[] args) {
            setConfigFile(
    "woxingwosu.properties");//設置配置文件路徑
            connectServer();
            listAllRemoteFiles();
    //列出所有文件和目錄
            changeWorkingDirectory("webroot");//進入文件夾webroot
            listRemoteFiles("*.jsp");//列出webroot目錄下所有jsp文件
            setFileType(FTP.BINARY_FILE_TYPE);//設置傳輸二進制文件
            uploadFile("woxingwosu.xml","myfile.xml");//上傳文件woxingwosu.xml,重新命名為myfile.xml
            renameFile("viewDetail.jsp""newName.jsp");//將文件viewDetail.jsp改名為newName.jsp
            deleteFile("UpdateData.class");//刪除文件UpdateData.class
            loadFile("UpdateData.java","loadFile.java");//下載文件UpdateData.java,并且重新命名為loadFile.java
            closeConnect();//關閉連接
        }
        
        
    /**
         * 上傳文件
         * 
    @param localFilePath--本地文件路徑
         * 
    @param newFileName--新的文件名
         
    */
        
    public static void uploadFile(String localFilePath,String newFileName){
            connectServer();
            
    //上傳文件
            BufferedInputStream buffIn=null;
            
    try{
                buffIn
    =new BufferedInputStream(new FileInputStream(localFilePath));
                ftpClient.storeFile(newFileName, buffIn);
            }
    catch(Exception e){
                e.printStackTrace();
            }
    finally{
                
    try{
                    
    if(buffIn!=null)
                        buffIn.close();
                }
    catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        
        
    /**
         * 下載文件
         * 
    @param remoteFileName --服務器上的文件名
         * 
    @param localFileName--本地文件名
         
    */
        
    public static void loadFile(String remoteFileName,String localFileName){
            connectServer();
            
    //下載文件
            BufferedOutputStream buffOut=null;
            
    try{
                buffOut
    =new BufferedOutputStream(new FileOutputStream(localFileName));
                ftpClient.retrieveFile(remoteFileName, buffOut);
            }
    catch(Exception e){
                e.printStackTrace();
            }
    finally{
                
    try{
                    
    if(buffOut!=null)
                        buffOut.close();
                }
    catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        
        
    /**
         * 列出服務器上所有文件及目錄
         
    */
        
    public static void listAllRemoteFiles(){
            listRemoteFiles(
    "*");
        }
        
        
    /**
         * 列出服務器上文件和目錄
         * 
    @param regStr --匹配的正則表達式
         
    */
        @SuppressWarnings(
    "unchecked")
        
    public static void listRemoteFiles(String regStr){
            connectServer();
            
    try{
                FTPFile[] files
    =ftpClient.listFiles(regStr);
                
    if(files==null||files.length==0)
                    System.out.println(
    "There has not any file!");
                
    else{
                    TreeSet
    <FTPFile> fileTree=new TreeSet(
                            
    new Comparator(){
                                
    //先按照文件的類型排序(倒排),然后按文件名順序排序
                                public int compare(Object objFile1,Object objFile2){
                                    
    if(objFile1==null)
                                        
    return -1;
                                    
    else if(objFile2==null)
                                        
    return 1;
                                    
    else{
                                        FTPFile file1
    =(FTPFile)objFile1;
                                        FTPFile file2
    =(FTPFile)objFile2;
                                        
    if(file1.getType()!=file2.getType())
                                            
    return file2.getType()-file1.getType();
                                        
    else
                                            
    return file1.getName().compareTo(file2.getName());
                                    }
                                }
                            }
                    );
                    
    for(FTPFile file:files)
                        fileTree.add(file);
                    System.out.printf(
    "%-35s%-10s%15s%15s\n","名稱","類型","修改日期","大小");
                    
    for(FTPFile file:fileTree){
                        System.out.printf(
    "%-35s%-10s%15s%15s\n",iso8859togbk(file.getName()),FILE_TYPES[file.getType()]
                                ,dateFormat.format(file.getTimestamp().getTime()),FileUtils.byteCountToDisplaySize(file.getSize()));
                    }
                }
            }
    catch(Exception e){
                e.printStackTrace();
            }
        }
        
        
    /**
         * 關閉連接
         
    */
        
    public static void closeConnect(){
            
    try{
                
    if(ftpClient!=null){
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            }
    catch(Exception e){
                e.printStackTrace();
            }
        }
        
        
    /**
         * 設置配置文件
         * 
    @param configFile
         
    */
        
    public static void setConfigFile(String configFile) {
            MiniFtp.configFile 
    = configFile;
        }
        
        
    /**
         * 設置傳輸文件的類型[文本文件或者二進制文件]
         * 
    @param fileType--BINARY_FILE_TYPE、ASCII_FILE_TYPE 
         
    */
        
    public static void setFileType(int fileType){
            
    try{
                connectServer();
                ftpClient.setFileType(fileType);
            }
    catch(Exception e){
                e.printStackTrace();
            }
        }
        
        
    /**
         * 擴展使用
         * 
    @return
         
    */
        
    protected static FTPClient getFtpClient(){
            connectServer();
            
    return ftpClient;
        }

        
    /**
         * 設置參數
         * 
    @param configFile --參數的配置文件
         
    */
        
    private static void setArg(String configFile){
            property
    =new Properties();
            BufferedInputStream inBuff
    =null;
            
    try{
                inBuff
    =new BufferedInputStream(new FileInputStream(configFile));
                property.load(inBuff);
                username
    =property.getProperty("username");
                password
    =property.getProperty("password");
                ip
    =property.getProperty("ip");
                port
    =Integer.parseInt(property.getProperty("port"));
            }
    catch(Exception e){
                e.printStackTrace();
            }
    finally{
                
    try{
                    
    if(inBuff!=null)
                        inBuff.close();
                }
    catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        
        
    /**
         * 連接到服務器
         
    */
        
    public static void connectServer() {
            
    if (ftpClient == null) {
                
    int reply;
                
    try {
                    setArg(configFile);
                    ftpClient
    =new FTPClient();
                    ftpClient.setDefaultPort(port);
                    ftpClient.configure(getFtpConfig());
                    ftpClient.connect(ip);
                    ftpClient.login(username, password);
                    ftpClient.setDefaultPort(port);
                    System.out.print(ftpClient.getReplyString());
                    reply 
    = ftpClient.getReplyCode();

                    
    if (!FTPReply.isPositiveCompletion(reply)) {
                        ftpClient.disconnect();
                        System.err.println(
    "FTP server refused connection.");
                    }
                } 
    catch (Exception e) {
                    System.err.println(
    "登錄ftp服務器【"+ip+"】失敗");
                    e.printStackTrace();
                }
            }
        }
        
        
    /**
         * 進入到服務器的某個目錄下
         * 
    @param directory
         
    */
        
    public static void changeWorkingDirectory(String directory){
            
    try{
                connectServer();
                ftpClient.changeWorkingDirectory(directory);
            }
    catch(IOException ioe){
                ioe.printStackTrace();
            }
        }
        
        
    /**
         * 返回到上一層目錄
         
    */
        
    public static void changeToParentDirectory(){
            
    try{
                connectServer();
                ftpClient.changeToParentDirectory();
            }
    catch(IOException ioe){
                ioe.printStackTrace();
            }
        }
        
        
    /**
         * 刪除文件
         
    */
        
    public static void deleteFile(String filename){
            
    try{
                connectServer();
                ftpClient.deleteFile(filename);
            }
    catch(IOException ioe){
                ioe.printStackTrace();
            }
        }
        
        
    /**
         * 重命名文件 
         * 
    @param oldFileName --原文件名
         * 
    @param newFileName --新文件名
         
    */
        
    public static void renameFile(String oldFileName,String newFileName){
            
    try{
                connectServer();
                ftpClient.rename(oldFileName, newFileName);
            }
    catch(IOException ioe){
                ioe.printStackTrace();
            }
        }
        
        
    /**
         * 設置FTP客服端的配置--一般可以不設置
         * 
    @return
         
    */
        
    private static FTPClientConfig getFtpConfig(){
            FTPClientConfig ftpConfig
    =new FTPClientConfig(FTPClientConfig.SYST_UNIX);
            ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);
            
    return ftpConfig;
        }
        
        
    /**
         * 轉碼[ISO-8859-1 ->  GBK]
         *不同的平臺需要不同的轉碼
         * 
    @param obj
         * 
    @return
         
    */
        
    private static String iso8859togbk(Object obj){
            
    try{
                
    if(obj==null)
                    
    return "";
                
    else
                    
    return new String(obj.toString().getBytes("iso-8859-1"),"GBK");
            }
    catch(Exception e){
                
    return "";
            }
        }

    }
        配置文件[woxingwosu.properties]
    ip:192.168.168.168
    username:admin
    password:
    8008
    port:
    21
    posted on 2007-08-03 19:14 破繭而出 閱讀(4802) 評論(11)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: FTP上傳,下載
    2007-08-03 23:13 | BeanSoft
    友情支持一下!  回復  更多評論
      
    # re: FTP上傳,下載[未登錄]
    2007-08-05 11:34 | aa
    changeWorkingDirectory(String directory) 不支持多級目錄的轉換,如
    root/a/b
    我在root下直接進入b要調用兩次上面的方法,沒有直接就調用一次就進入b目錄的方法  回復  更多評論
      
    # re: FTP上傳,下載
    2007-08-06 08:39 | 平民老百姓
    @aa
    我測試是可以的,例如進入a/b目錄
    changeWorkingDirectory("a"+java.io.File.separator+"b");
    這樣就可以進入b目錄
      回復  更多評論
      
    # re: FTP上傳,下載
    2007-08-06 17:29 | Scott.Pan
    不錯,收藏了,以后應該會由用的著參考的地方.感謝  回復  更多評論
      
    # re: FTP上傳,下載
    2007-10-06 21:23 |
    好東西  回復  更多評論
      
    # re: FTP上傳,下載
    2007-10-19 15:19 | zhy
    如果上傳或下載的文件名為中文,會出現亂碼,該如何解決?  回復  更多評論
      
    # re: FTP上傳,下載
    2008-01-25 14:22 | DUCK
    ftpClient.setControlEncoding("GBK");//可以解決中文問題  回復  更多評論
      
    # re: FTP上傳,下載
    2008-02-22 18:41 | octopusyu
    我想問一下,有沒有像Http上傳方式一樣的Ftp上傳,比如我在客戶端通過<input type="file" name="Location">的方式瀏覽選中一個文件,然后通過Ftp上傳到Ftp服務器中的Java實現示例?你這里所謂的Ftp客戶端程序,其實是從應用服務器中上傳文件到Ftp服務器,我需要的是B/S結構中的瀏覽器端通過Ftp上傳文件。  回復  更多評論
      
    # re: FTP上傳,下載
    2008-02-23 22:28 | 破繭而出
    @octopusyu
    Sorry,B/S下的FTP文件上傳我沒做過,不知道行不行的通
      回復  更多評論
      
    # re: FTP上傳,下載
    2008-12-02 17:42 | jjw
    great  回復  更多評論
      
    # re: FTP上傳,下載
    2015-05-18 08:07 | ftp.w3.org
    @BeanSoft
      回復  更多評論
      
    主站蜘蛛池模板: 亚洲va在线va天堂va888www| 亚洲国产婷婷六月丁香| 亚洲中文无码a∨在线观看| 国产午夜成人免费看片无遮挡 | 亚洲AV色无码乱码在线观看| 91在线视频免费播放| 国产亚洲玖玖玖在线观看| 国内免费高清在线观看| 99亚偷拍自图区亚洲| 国产美女被遭强高潮免费网站| 风间由美在线亚洲一区| 亚洲综合激情另类专区| 在线观看人成视频免费无遮挡| 亚洲AV无码成人专区片在线观看| 秋霞人成在线观看免费视频| 亚洲大尺码专区影院| 午夜精品在线免费观看| 免费看黄网站在线看| 国产亚洲精品精华液| 四虎在线成人免费网站| 日韩亚洲人成网站| 亚洲国产精品一区二区成人片国内| 在线看无码的免费网站| 亚洲人成网站在线播放2019| 免费一级毛片不卡不收费| 国产麻豆成人传媒免费观看| 亚洲国产av一区二区三区丶| 国产精品色午夜视频免费看| 国产一二三四区乱码免费| 国产精品久久亚洲不卡动漫| 中文字幕中韩乱码亚洲大片| 亚欧在线精品免费观看一区| 亚洲AV日韩AV永久无码色欲| 亚洲中久无码永久在线观看同| 国产在线jyzzjyzz免费麻豆| 全部一级一级毛片免费看| 亚洲国产精品久久久久婷婷老年| 在线精品免费视频| a级毛片毛片免费观看久潮喷 | 亚洲一区日韩高清中文字幕亚洲 | 国产成人免费永久播放视频平台|