<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客服端的程序,可以實(shí)現(xiàn)上傳,下載,列出文件,刪除文件,重命名文件操作。

         SUN也提供了FTP操作的包,但是官方建議不要使用,而且沒有API文檔。另外IBM和APACHE也提供了相應(yīng)的FTP包,APACHE的包功能比較強(qiáng)大,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;

    /**
     * 其實(shí)JDK里面也有支持FTP操作的包【jre/lib下的rt.jar】,但是SUN的DOC里面并沒有提供相應(yīng)文檔,
     * 因?yàn)檫@里面的包,不被官方支持,建議不要使用。我們可以使用第三方提供的包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");//設(shè)置配置文件路徑
            connectServer();
            listAllRemoteFiles();
    //列出所有文件和目錄
            changeWorkingDirectory("webroot");//進(jìn)入文件夾webroot
            listRemoteFiles("*.jsp");//列出webroot目錄下所有jsp文件
            setFileType(FTP.BINARY_FILE_TYPE);//設(shè)置傳輸二進(jìn)制文件
            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();//關(guān)閉連接
        }
        
        
    /**
         * 上傳文件
         * 
    @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 --服務(wù)器上的文件名
         * 
    @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();
                }
            }
        }
        
        
    /**
         * 列出服務(wù)器上所有文件及目錄
         
    */
        
    public static void listAllRemoteFiles(){
            listRemoteFiles(
    "*");
        }
        
        
    /**
         * 列出服務(wù)器上文件和目錄
         * 
    @param regStr --匹配的正則表達(dá)式
         
    */
        @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();
            }
        }
        
        
    /**
         * 關(guān)閉連接
         
    */
        
    public static void closeConnect(){
            
    try{
                
    if(ftpClient!=null){
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            }
    catch(Exception e){
                e.printStackTrace();
            }
        }
        
        
    /**
         * 設(shè)置配置文件
         * 
    @param configFile
         
    */
        
    public static void setConfigFile(String configFile) {
            MiniFtp.configFile 
    = configFile;
        }
        
        
    /**
         * 設(shè)置傳輸文件的類型[文本文件或者二進(jìn)制文件]
         * 
    @param fileType--BINARY_FILE_TYPE、ASCII_FILE_TYPE 
         
    */
        
    public static void setFileType(int fileType){
            
    try{
                connectServer();
                ftpClient.setFileType(fileType);
            }
    catch(Exception e){
                e.printStackTrace();
            }
        }
        
        
    /**
         * 擴(kuò)展使用
         * 
    @return
         
    */
        
    protected static FTPClient getFtpClient(){
            connectServer();
            
    return ftpClient;
        }

        
    /**
         * 設(shè)置參數(shù)
         * 
    @param configFile --參數(shù)的配置文件
         
    */
        
    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();
                }
            }
        }
        
        
    /**
         * 連接到服務(wù)器
         
    */
        
    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服務(wù)器【"+ip+"】失敗");
                    e.printStackTrace();
                }
            }
        }
        
        
    /**
         * 進(jìn)入到服務(wù)器的某個目錄下
         * 
    @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();
            }
        }
        
        
    /**
         * 設(shè)置FTP客服端的配置--一般可以不設(shè)置
         * 
    @return
         
    */
        
    private static FTPClientConfig getFtpConfig(){
            FTPClientConfig ftpConfig
    =new FTPClientConfig(FTPClientConfig.SYST_UNIX);
            ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);
            
    return ftpConfig;
        }
        
        
    /**
         * 轉(zhuǎn)碼[ISO-8859-1 ->  GBK]
         *不同的平臺需要不同的轉(zhuǎn)碼
         * 
    @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 破繭而出 閱讀(4803) 評論(11)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: FTP上傳,下載
    2007-08-03 23:13 | BeanSoft
    友情支持一下!  回復(fù)  更多評論
      
    # re: FTP上傳,下載[未登錄]
    2007-08-05 11:34 | aa
    changeWorkingDirectory(String directory) 不支持多級目錄的轉(zhuǎn)換,如
    root/a/b
    我在root下直接進(jìn)入b要調(diào)用兩次上面的方法,沒有直接就調(diào)用一次就進(jìn)入b目錄的方法  回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2007-08-06 08:39 | 平民老百姓
    @aa
    我測試是可以的,例如進(jìn)入a/b目錄
    changeWorkingDirectory("a"+java.io.File.separator+"b");
    這樣就可以進(jìn)入b目錄
      回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2007-08-06 17:29 | Scott.Pan
    不錯,收藏了,以后應(yīng)該會由用的著參考的地方.感謝  回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2007-10-06 21:23 |
    好東西  回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2007-10-19 15:19 | zhy
    如果上傳或下載的文件名為中文,會出現(xiàn)亂碼,該如何解決?  回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2008-01-25 14:22 | DUCK
    ftpClient.setControlEncoding("GBK");//可以解決中文問題  回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2008-02-22 18:41 | octopusyu
    我想問一下,有沒有像Http上傳方式一樣的Ftp上傳,比如我在客戶端通過<input type="file" name="Location">的方式瀏覽選中一個文件,然后通過Ftp上傳到Ftp服務(wù)器中的Java實(shí)現(xiàn)示例?你這里所謂的Ftp客戶端程序,其實(shí)是從應(yīng)用服務(wù)器中上傳文件到Ftp服務(wù)器,我需要的是B/S結(jié)構(gòu)中的瀏覽器端通過Ftp上傳文件。  回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2008-02-23 22:28 | 破繭而出
    @octopusyu
    Sorry,B/S下的FTP文件上傳我沒做過,不知道行不行的通
      回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2008-12-02 17:42 | jjw
    great  回復(fù)  更多評論
      
    # re: FTP上傳,下載
    2015-05-18 08:07 | ftp.w3.org
    @BeanSoft
      回復(fù)  更多評論
      
    主站蜘蛛池模板: 成全高清在线观看免费| 免费一区二区无码视频在线播放| 亚洲不卡在线观看| 亚洲国产午夜精品理论片在线播放| 国产亚洲综合久久| 97在线免费视频| 97碰公开在线观看免费视频| 日本高清免费不卡视频| 国产AV无码专区亚洲AWWW| 久久久久亚洲AV无码观看| 亚洲色成人WWW永久在线观看| 四虎影视永久在线精品免费| 无码午夜成人1000部免费视频| 无码人妻一区二区三区免费手机| 免费在线观看亚洲| 亚洲AV成人无码久久精品老人| 最新国产成人亚洲精品影院| 成在线人直播免费视频| 在线a免费观看最新网站| 国产麻豆免费观看91| 国产亚洲精品va在线| 亚洲AV无码一区二区三区人| 免费夜色污私人影院网站电影| 亚洲免费在线视频| 情侣视频精品免费的国产| 久久精品国产精品亚洲艾| 亚洲欧美成人av在线观看| a级黄色毛片免费播放视频| 国产在线观看片a免费观看| 亚洲中文字幕无码久久综合网| 亚洲六月丁香六月婷婷蜜芽| 国产精品免费大片一区二区| 国产成人福利免费视频| 国产综合精品久久亚洲| 亚洲欧洲日本在线观看| 中文字幕免费不卡二区| 国产一区二区三区免费看| 久久精品国产亚洲AV嫖农村妇女| 欧洲精品码一区二区三区免费看| 亚洲精品在线免费看| 中文字幕精品亚洲无线码一区应用|