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

         SUN也提供了FTP操作的包,但是官方建議不要使用,而且沒(méi)有API文檔。另外IBM和APACHE也提供了相應(yīng)的FTP包,APACHE的包功能比較強(qiáng)大,IBM的沒(méi)有用過(guò),不知道怎樣。

         我把我的代碼貼出來(lái),希望和大家一起交流。
    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里面并沒(méi)有提供相應(yīng)文檔,
     * 因?yàn)檫@里面的包,不被官方支持,建議不要使用。我們可以使用第三方提供的包apache.commons。
     * apache.commons的包,都有文檔,方便使用
     * 另外IBM也有提供一個(gè)ftp包,我沒(méi)有用過(guò),有興趣的可以去研究一下
     * @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={"文件","目錄","符號(hào)鏈接","未知類(lèi)型"};
        
        
    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(){
                                
    //先按照文件的類(lèi)型排序(倒排),然后按文件名順序排序
                                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","名稱(chēng)","類(lèi)型","修改日期","大小");
                    
    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è)置傳輸文件的類(lèi)型[文本文件或者二進(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ù)器的某個(gè)目錄下
         * 
    @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]
         *不同的平臺(tái)需要不同的轉(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) 評(píng)論(11)  編輯  收藏 所屬分類(lèi): Java

    FeedBack:
    # re: FTP上傳,下載
    2007-08-03 23:13 | BeanSoft
    友情支持一下!  回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載[未登錄](méi)
    2007-08-05 11:34 | aa
    changeWorkingDirectory(String directory) 不支持多級(jí)目錄的轉(zhuǎn)換,如
    root/a/b
    我在root下直接進(jìn)入b要調(diào)用兩次上面的方法,沒(méi)有直接就調(diào)用一次就進(jìn)入b目錄的方法  回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2007-08-06 08:39 | 平民老百姓
    @aa
    我測(cè)試是可以的,例如進(jìn)入a/b目錄
    changeWorkingDirectory("a"+java.io.File.separator+"b");
    這樣就可以進(jìn)入b目錄
      回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2007-08-06 17:29 | Scott.Pan
    不錯(cuò),收藏了,以后應(yīng)該會(huì)由用的著參考的地方.感謝  回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2007-10-06 21:23 |
    好東西  回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2007-10-19 15:19 | zhy
    如果上傳或下載的文件名為中文,會(huì)出現(xiàn)亂碼,該如何解決?  回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2008-01-25 14:22 | DUCK
    ftpClient.setControlEncoding("GBK");//可以解決中文問(wèn)題  回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2008-02-22 18:41 | octopusyu
    我想問(wèn)一下,有沒(méi)有像Http上傳方式一樣的Ftp上傳,比如我在客戶(hù)端通過(guò)<input type="file" name="Location">的方式瀏覽選中一個(gè)文件,然后通過(guò)Ftp上傳到Ftp服務(wù)器中的Java實(shí)現(xiàn)示例?你這里所謂的Ftp客戶(hù)端程序,其實(shí)是從應(yīng)用服務(wù)器中上傳文件到Ftp服務(wù)器,我需要的是B/S結(jié)構(gòu)中的瀏覽器端通過(guò)Ftp上傳文件。  回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2008-02-23 22:28 | 破繭而出
    @octopusyu
    Sorry,B/S下的FTP文件上傳我沒(méi)做過(guò),不知道行不行的通
      回復(fù)  更多評(píng)論
      
    # re: FTP上傳,下載
    2008-12-02 17:42 | jjw
    # re: FTP上傳,下載
    2015-05-18 08:07 | ftp.w3.org
    @BeanSoft
      回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 亚洲国产一成久久精品国产成人综合 | 亚洲人成伊人成综合网久久| 亚洲电影在线免费观看| 亚洲欧洲日韩综合| 亚洲乱理伦片在线观看中字| 免费夜色污私人影院网站电影| 中文字幕a∨在线乱码免费看| 蜜桃成人无码区免费视频网站 | 国产伦精品一区二区免费| 免费一区二区三区| 国产免费久久精品99re丫y| 在线观看免费国产视频| 久久亚洲中文字幕精品一区| 亚洲成a人片在线观看中文动漫| 亚洲理论片中文字幕电影| 国产亚洲高清在线精品不卡| 天黑黑影院在线观看视频高清免费| 7m凹凸精品分类大全免费| 国产又大又长又粗又硬的免费视频| 亚洲一区二区视频在线观看| 久久精品亚洲一区二区三区浴池 | 亚洲人成7777| 又粗又长又爽又长黄免费视频| 日韩精品免费视频| 免费无码又爽又刺激高潮的视频| 亚洲精品无码久久久| 亚洲日本中文字幕| 亚洲av无码一区二区三区四区| APP在线免费观看视频| 国产精品视频永久免费播放| 中文字幕亚洲综合久久男男| 亚洲最大黄色网站| 深夜久久AAAAA级毛片免费看| 亚洲电影免费在线观看| 日本视频免费在线| 无码乱人伦一区二区亚洲| 久久无码av亚洲精品色午夜| 午夜无码A级毛片免费视频| 国产午夜免费福利红片| 91亚洲国产成人精品下载| 日本视频免费观看|