1. 程式人生 > >JAVA 實現FTP上傳下載(sun.net.ftp.FtpClient)

JAVA 實現FTP上傳下載(sun.net.ftp.FtpClient)

package com.why.ftp;      

import java.io.DataInputStream;      
import java.io.File;      
import java.io.FileInputStream;      
import java.io.FileOutputStream;      
import java.io.IOException;      
import java.io.OutputStream;      
import java.util.ArrayList;      
import java.util.List;      
import java.util.StringTokenizer;      

import sun.net.TelnetInputStream;      
import sun.net.TelnetOutputStream;      
import sun.net.ftp.FtpClient;      

/**    
 * ftp上傳,下載    
 * @author why 2009-07-30    
 *    
 */     
public class FtpUtil {      

    private String ip = "";      

    private String username = "";      

    private String password = "";      


    private int port = -1;      

    private String path = "";      

    FtpClient ftpClient = null;      

    OutputStream os = null;      

    FileInputStream is = null;      

    public FtpUtil(String serverIP, String username, String password) {      
        this.ip = serverIP;      
        this.username = username;      

        this.password = password;      
    }      

    public FtpUtil(String serverIP, int port, String username, String password) {      
        this.ip = serverIP;      
        this.username = username;      
        this.password = password;      
        this.port = port;      
    }      

    /**    
     * 連線ftp伺服器    
     *     
     * @throws IOException    
     */     
    public boolean connectServer(){      
        ftpClient = new FtpClient();      
        try {      
            if(this.port != -1){      
                    ftpClient.openServer(this.ip,this.port);      
            }else{      
                ftpClient.openServer(this.ip);      
            }      
            ftpClient.login(this.username, this.password);      
            if (this.path.length() != 0){      
                ftpClient.cd(this.path);// path是ftp服務下主目錄的子目錄                 
            }      
            ftpClient.binary();// 用2進位制上傳、下載      
            System.out.println("已登入到\"" + ftpClient.pwd() + "\"目錄");      
            return true;      
        }catch (IOException e){      
            e.printStackTrace();      
            return false;      
        }      
    }      

    /**    
     * 斷開與ftp伺服器連線    
     *     
     * @throws IOException    
     */     
    public boolean closeServer(){      
        try{      
            if (is != null) {      
                is.close();      
            }      
            if (os != null) {      
                os.close();      
            }      
            if (ftpClient != null) {      
                ftpClient.closeServer();      
            }      
            System.out.println("已從伺服器斷開");      
            return true;      
        }catch(IOException e){      
            e.printStackTrace();      
            return false;      
        }      
    }      

    /**    
     * 檢查資料夾在當前目錄下是否存在    
     * @param dir    
     * @return    
     */     
     private boolean isDirExist(String dir){      
         String pwd = "";      
         try {      
             pwd = ftpClient.pwd();      
             ftpClient.cd(dir);      
             ftpClient.cd(pwd);      
         }catch(Exception e){      
             return false;      
         }      
         return true;       
     }      

    /**    
     * 在當前目錄下建立資料夾    
     * @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);      

相關推薦

JAVA 實現FTP下載(sun.net.ftp.FtpClient)

package com.why.ftp;      import java.io.DataInputStream;      import java.io.File;      import java.io.FileInputStream;      import java

java實現檔案下載ftp伺服器

以前做的一個專案,用到了檔案上傳下載至ftp伺服器,現在對其進行一下複習,比較簡單,一下就能看明白。 環境:首先,先安裝ftp伺服器,我是在win8本地用IIS配置的, 百度一下就可以找到安裝文件。 1.在你的專案目錄下建立ftp配置檔案,目錄如下圖

java實現檔案下載的三種方法

JSP+Servlet 一、檔案上傳下載原理 在TCP/IP中,最早出現的檔案上傳機制是FTP。它是將檔案由客戶端傳送到伺服器的標準機制。但是在jsp程式設計中不能使用FTP方法來上傳檔案,這是由jsp的執行機制所決定的。 通過為表單元素設定Method=“post” en

Java FTP下載實現

.net 一個 bin 上傳文件 pre 上傳下載 ole 切換 apach 昨天修改了一個接口,看到它涉及FTP的上傳與下載,用的是:org.apache.commons.net.ftp.FTPClient,它只支持FTP,不支持SFTP 總結下來如此使用: //創建對

java實現FTP下載FTPClient類進行FTP下載大檔案(包含導致假死現象)

介紹:  FTPClient是一個強大的FTP上傳下載工具,可以實現各種方式的ftp檔案傳輸,可以支援上傳下載各種大檔案(已在實踐中使用),而且存在官網使使用者方便的使用這個工具等等。 1.首先,程式中設定ftp請求方式為被動模式,即程式去請求ftp伺服器,要求伺服器來

Java 實現Ftp下載檔案

最近專案中需要實現將檔案先存放到ftp上,需要的時候再從ftp上下載,做的過程中碰到了問題,發現中文檔名的無法上傳到ftp上,ftp上的中文檔名的檔案下載不下來,幾番折騰,終於搞定了,記錄一下備忘。首先給工程新增maven依賴,pom.xml檔案中新增:<depende

使用Apache Commons Net API實現FTP下載過程中的坑點

       最近專案需要實現FTP上傳、下載功能,採用了Apache Commons Net API。程式碼很快就完成了,但由於對相關API使用場景不是很熟悉,走了一些彎路,抽一點時間做一下總結。         A)主動被動模式選擇:FTP主動模式和被動模式的詳細介紹可

Linux系統中使用lftp命令實現FTP下載

lcd 工作 亂碼問題 pwd -- cd 命令 史記 size ls 命令 Linux 下常用的操作命令有 ftp、 lftp 和 sftp,圖形化界面非常好用的有 FileZilla。不過在服務器命令界面中,lftp使用比較方便,功能也比ftp更加強大。lftp的界面

Java實現檔案下載

上面的博文我寫了Java對檔案操作的功能https://blog.csdn.net/qq_24380635/article/details/83273359,這次記錄一下檔案上傳和下載的功能。看看兩者有什麼不同,就可以知道檔案操作和檔案上傳下載有什麼不同了。我也是一點點懂,也

Java實現檔案下載的三種解決方案

第一點:Java程式碼實現檔案上傳   FormFile file=manform.getFile();    String newfileName = null;   String newpathname=null;   String fileAddre="/numU

java實現pdf下載、線上預覽、刪除、修改等功能

最近閒來無事,做了一個pdf的小功能,以供各位大神參考。下面是效果展示圖:功能主頁:點選上傳PDF按鈕:上傳檔案之後:線上預覽:開發環境:jdk_1.8                mysql_5.7開發工具:Eclipse                 navicat技

spring boot使用nginx和ftp伺服器實現圖片下載(windows server)

本人使用的springboot為1.5.6版本<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-pa

CentOS 安裝rz和sz命令,實現ftp下載功能

lrzsz在linux裡可代替ftp上傳和下載。 windows 需要向centos伺服器上傳檔案,可直接在centos上執行命令yum -y install lrzsz 程式會自動安裝好,然後如你要下載者sz [找到你要下載的檔案] 如果你要上傳,者rz 瀏覽找到你

Shell指令碼實現FTP下載檔案

Linux下使用Shell指令碼實現FTP自動上傳和下載檔案 登入FTP實現下載檔案功能 FTP伺服器:10.11.10.11 FTP路徑:Down 本地路徑: ./ 將檔案從FTP下載到本地的指令碼如下: 批量下載指令碼程式碼 #從

java web 一行程式碼實現檔案下載

       每當要實現檔案上傳下載的功能時,都要複製貼上拼湊程式碼。如果用了不同的框架,程式碼還不一樣,配置啥的一堆,甚是繁瑣,不喜歡。科學家們喜歡把紛繁複雜的自然現象總結為一個個簡潔的公式,我們也來試試,把上傳下載整成一行程式碼~        花了一天時間,整了個通用

iOS開發之結合asp.net webservice實現檔案下載

iOS開發中會經常用到檔案上傳下載的功能,這篇檔案將介紹一下使用asp.net webservice實現檔案上傳下載。 首先,讓我們看下檔案下載。 這裡我們下載cnblogs上的一個zip檔案。使用NSURLRequest+NSURLConnection可以很方便的實現這個功能。 同步下載檔案:

Java 使用 SFTP 實現檔案下載(二)

package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraf

java實現檔案ftp伺服器功能

 java檔案上傳至ftp伺服器         廢話不多說,直接上程式碼,這裡提供兩種方法,此程式執行需要下載apache-commons-net.jar包,可以使用maven倉庫下載,也可以使用http://www.java2s.com/搜尋下載。 第一種方法:使用下

C#實現FTP下載功能

//ftp的上傳功能     private void Upload(string filename)     {         FileInfo fileInf = new FileInfo(filename);         string uri = "ftp://

java實現檔案下載

           東風化宇,檔案上傳 一、對於檔案上傳,瀏覽器在上傳的過程中是將檔案以流的形式提交到伺服器端的,Servlet獲取上傳檔案的輸入流然後再解析裡面的請求引數是比較麻煩。 JSP程式碼,POST請求,表單必須設定為enctype="multipar