Java中實現FTP上傳下載文件的功能,完整代碼

jopen 10年前發布 | 277K 次閱讀 Java 文件上傳

一個JAVA 實現FTP功能的代碼,包括了服務器的設置模塊,并包括有上傳文件至FTP的通用方法、下載文件的通用方法以及刪除文件、在ftp服務器上穿件文件夾、檢測文件夾是否存在等,里面的有些代碼對編寫JAVA文件上傳或許有參考價值,Java FTP主文件代碼:

package ftpDemo;    
    import java.io.DataOutputStream;    
    import java.io.InputStream;    
    import java.io.OutputStream;    
    import sun.net.TelnetInputStream;    
   import sun.net.TelnetOutputStream;    
    import sun.net.ftp.FtpClient;    
    public class ftpUtil {    
    // 上傳文件至FTP通用方法    
    public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){    
        try {    
            String ftpHost = kmConfig.getFtpHost();    
            int port = kmConfig.getFtpPort();    
            String userName = kmConfig.getFtpUser();    
            String passWord = kmConfig.getFtpPassword();    
            String path = kmConfig.getFtpPath();    
            FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務器的IP地址,port為FTP服務器的登陸端口,ftpHost為String型,port為int型。    
            ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務器的登陸用戶名和密碼    
            ftpClient.binary();    
            ftpClient.cd(path);// path為FTP服務器上保存上傳文件的路徑。    
            TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName為上傳的文件名    
            DataOutputStream dataOut = new DataOutputStream(telnetOut);    
            byte buffer[] = new byte[ * ];    
            int count = ;    
            while ((count = is.read(buffer)) != -) {    
                dataOut.write(buffer, , count);    
            }    
            telnetOut.close();    
            dataOut.close();    
            ftpClient.closeServer();    
        } catch (Exception e) {    
            System.out.println("上傳文件失敗!請檢查系統FTP設置,并確認FTP服務啟動");    
        }    
    }    
    // 刪除文件至FTP通用方法    
    public static void deleteFileFtp(KmConfig kmConfig,String fileName){    
        try {    
            String ftpHost = kmConfig.getFtpHost();    
            int port = kmConfig.getFtpPort();    
            String userName = kmConfig.getFtpUser();    
            String passWord = kmConfig.getFtpPassword();    
            String path = kmConfig.getFtpPath();    
            FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務器的IP地址,port為FTP服務器的登陸端口,ftpHost為String型,port為int型。    
            ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務器的登陸用戶名和密碼    
            ftpClient.binary();    
            ftpClient.cd(path);// path為FTP服務器上保存上傳文件的路徑。    
            try {    
                ftpClient.sendServer("dele " + fileName + "\r\n");    
            } catch (Exception e) {    
                System.out.println("刪除文件失敗!請檢查系統FTP設置,并確認FTP服務啟動");    
            }    
            ftpClient.closeServer();    
        } catch (Exception e) {    
            System.out.println("刪除文件失敗!");    
        }    
    }    
    // 下載ftp文件    
    public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){    
        try {    
            String ftpHost = kmConfig.getFtpHost();    
            int port = kmConfig.getFtpPort();    
            String userName = kmConfig.getFtpUser();    
            String passWord = kmConfig.getFtpPassword();    
            String path = kmConfig.getFtpPath();    
            FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務器的IP地址,port為FTP服務器的登陸端口,ftpHost為String型,port為int型。    
            ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務器的登陸用戶名和密碼    
            ftpClient.binary();    
            ftpClient.cd(path);// path為FTP服務器上保存上傳文件的路徑。    
            try {    
                TelnetInputStream in = ftpClient.get(fileName);    
                byte[] bytes = new byte[];    
                int cnt=;    
                while ((cnt=in.read(bytes,,bytes.length)) != -) {    
                    outputStream.write(bytes, , cnt);    
                }    
                outputStream.close();    
                in.close();    
            } catch (Exception e) {    
                ftpClient.closeServer();    
                e.printStackTrace();    
            }    
            ftpClient.closeServer();    
        } catch (Exception e) {    
            System.out.println("下載文件失敗!請檢查系統FTP設置,并確認FTP服務啟動");    
        }    
    }    
    //在ftp服務器上傳件文件夾    
        public boolean createDir(String path,FtpClient ftpClient) throws Exception{    
                //進入到home文件夾下    
                ftpClient.cd("/home");    
                //創建遠程文件夾    
               //遠程命令包括    
               //USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT<br>    
    //          PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS<br>    
    //          ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH<br>    
    //          REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ<br>    
    //          QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT<br>    
    //               在服務器上執行命令,如果用sendServer來執行遠程命令(不能執行本地FTP命令)的話,所有FTP命令都要加上/r/n<br>    
    //                    ftpclient.sendServer("XMKD /test/bb/r/n"); //執行服務器上的FTP命令<br>    
    //                    ftpclient.readServerResponse一定要在sendServer后調用<br>    
    //                    nameList("/test")獲取指目錄下的文件列表<br>    
    //                    XMKD建立目錄,當目錄存在的情況下再次創建目錄時報錯<br>    
    //                    XRMD刪除目錄<br>    
    //                    DELE刪除文件<br>    
           //通過遠程命令 穿件一個files文件夾    
            ftpClient.sendServer("MKD "+ path + "\r\n");    
            //這個方法必須在 這兩個方法中間調用 否則 命令不管用    
            ftpClient.binary();    
            ftpClient.readServerResponse();    
            return false;    
        }    
    /**    
      * 檢查文件夾是否存在    
      * @param dir    
      * @param ftpClient    
      * @return    
      */    
        public boolean isDirExist(String dir, FtpClient ftpClient) {    
             try {    
                ftpClient.cd(dir);    
            } catch (Exception e) {    
                return false;    
            }    
            return true;    
        }    
    }

KmConfig.java代碼如下:定義FTP服務器參數,包括登錄的用戶名密碼之類的。

package ftpDemo;

public class KmConfig {

    //主機ip

    private String FtpHost = "";

    //端口號

    private int FtpPort;

    //ftp用戶名

    private String FtpUser = "";

    //ftp密碼

    private String FtpPassword = "";

    //ftp中的目錄

    private String FtpPath = "";

    public String getFtpHost() {

        return FtpHost;

    }

    public void setFtpHost(String ftpHost) {

        FtpHost = ftpHost;

    }

    public int getFtpPort() {

        return FtpPort;

    }

    public void setFtpPort(int ftpPort) {

        FtpPort = ftpPort;

    }

    public String getFtpUser() {

        return FtpUser;

    }

    public void setFtpUser(String ftpUser) {

        FtpUser = ftpUser;

    }

    public String getFtpPassword() {

        return FtpPassword;

    }

    public void setFtpPassword(String ftpPassword) {

        FtpPassword = ftpPassword;

    }

    public String getFtpPath() {

        return FtpPath;

    }

    public void setFtpPath(String ftpPath) {

        FtpPath = ftpPath;

    }

}</pre>

下面是測試代碼:

package ftpDemo;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.InputStream;

public class Test {

    public static void main(String[] args) {

        //設置ftp

        KmConfig km = new KmConfig();

        km.setFtpHost("...");

        km.setFtpPort();

        km.setFtpUser("test");

        km.setFtpPassword("");

        km.setFtpPath("KM");

        //上傳到ftp

        ftpUtil util=new ftpUtil();

        File file = new File("F:/文章.jpg");

        InputStream in;

        try {

            in = new FileInputStream(file);

            util.upLoadFileFtp(km, in, "更改后的名字.jpg");

        } catch (FileNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}</pre>

來自:http://my.oschina.net/u/1866821/blog/343650

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!