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

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

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;

    }

}

下面是測試代碼:測試

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();

        }

    }

}
相關文章
相關標籤/搜索