利用FtpClient實現上傳下載及獲得檔案目錄

來源:互聯網
上載者:User
sun代碼中有個FtpClient,雖然沒有把它用做公開的工具包,但我們也還是可以拿它來利用一下.   Java代碼  1./** 2. * FTP檔案上傳與下載 3. * notice: 4. * 之所以每次都要串連一次ftp是讓它的目錄重新返回到相對的根目錄, 5. * 如果複用上次的FtpClient則可能它當前在FTP的目錄不是我們想要的 6. * 目錄,所以在FTP上傳下載檔案時,最好每次都重新登入一下FTP 7. * @author lgh 8. */  9.public class FTPClient {  10.  11.    private FtpClient ftpClient;  12.    private String ip;  13.    private int port;  14.    private String username;  15.    private String password;  16.  17.    public FTPClient() {  18.    }  19.  20.    public FTPClient(String ip, int port, String username, String password) {  21.        this.ip = ip;  22.        this.port = port;  23.        this.username = username;  24.        this.password = password;  25.    }  26.  27.    /** 28.     * 需要備份的檔案 29.     * @param list 30.     * @return 31.     */  32.    private List needBackFile(List list, String relativeName) {  33.        List fileNames = new ArrayList();  34.        for (int i = 0; i < list.size(); i++) {  35.            String temp = (String) list.get(i);  36.            if (temp.indexOf(relativeName) > 0) {  37.                fileNames.add(temp);  38.            }  39.        }  40.        return fileNames;  41.    }  42.  43.    public static void main(String[] args) {  44.        FTPClient client = new FTPClient(".....", 21, "...", "....");  45.  46.        try {  47.//            client.downloadFile("CRM/ccbcrm/", "D://", "CRMClientLog.log", "CRMClientLog.log");  48.//            client.uploadFile("", "D://", "CRMClientLog.log");  49.            List list = client.getList("csrtestftp/網路/", false);  50.        } catch (Exception ex) {  51.            Logger.getLogger(FTPClient.class.getName()).log(Level.SEVERE, null, ex);  52.        }  53.    }  54.  55.    /** 56.     * 關閉FTP串連  57.     * @throws java.lang.Exception 58.     */  59.    public void closeServer() throws Exception {  60.        ftpClient.closeServer();  61.    }  62.  63.    /** 64.     * 串連ftp伺服器 65.     * @param ip 66.     * @param port 67.     * @param user 68.     * @param pwd 69.     * @return 70.     * @throws Exception 71.     */  72.    public boolean connectServer(String ip, int port, String user, String pwd)  73.            throws Exception {  74.        boolean isSuccess = false;  75.        try {  76.            ftpClient = new FtpClient();  77.            ftpClient.openServer(ip, port);  78.            ftpClient.login(user, pwd);  79.            isSuccess = true;  80.        } catch (Exception ex) {  81.            ex.printStackTrace();  82.        }  83.        return isSuccess;  84.    }  85.  86.    /** 87.     * 獲得遠程下的目錄 88.     * @param remotePath 遠程目錄 89.     * @param fullPath 是否需要完整路徑 90.     * @return 91.     */  92.    public List getList(String remotePath, boolean fullPath) {  93.        List list = new ArrayList();  94.        try {  95.            if (connectServer(ip, port, username, password)) {  96.                BufferedReader br = new BufferedReader(new InputStreamReader(ftpClient.nameList(remotePath)));  97.                String temp = ftpClient.getResponseString();  98.                System.out.println(temp);  99.                String readLine = null;  100.                int lastIndex;  101.                if ((lastIndex = remotePath.lastIndexOf("/")) > 0||(lastIndex = remotePath.lastIndexOf("//")) > 0  102.                    ||(lastIndex = remotePath.lastIndexOf("\\")) > 0||(lastIndex = remotePath.lastIndexOf(File.separator)) > 0) {  103.                    remotePath = remotePath.substring(0, lastIndex);  104.                }   //去掉remotePath的尾碼,可能是'/',也有可能是其他符號  105.                while ((readLine = br.readLine()) != null) {  106.  107.                    if (!fullPath) {  108.                        list.add(readLine.substring(remotePath.length() + 1, readLine.length()));  109.                        System.out.println(readLine.substring(remotePath.length() + 1, readLine.length()));  110.                    } else {  111.                        list.add(readLine);  112.                        System.out.println(readLine);  113.                    }  114.                }  115.                ftpClient.closeServer();  116.            }  117.        } catch (Exception ex) {  118.            ex.printStackTrace();  119.        }  120.        return list;  121.    }  122.  123.    /** 124.     * 下載檔案 125.     * @param remotePath 126.     * @param localPath 127.     * @param filename 128.     * @throws Exception 129.     */  130.    public void downloadFile(String remotePath, String localPath, String remoteFileName, String localFileName) throws Exception {  131.        try {  132.            if (connectServer(ip, port, username, password)) {  133.                if (remotePath.length() != 0) {  134.                    ftpClient.cd(remotePath);  135.                }  136.                ftpClient.binary();  137.                TelnetInputStream is = ftpClient.get(remoteFileName);  138.                File fp = new File(localPath);  139.                if (!fp.exists()) {  140.                    fp.mkdirs();  141.                }  142.                File file_out = new File(localPath + File.separator + localFileName);  143.                FileOutputStream os = new FileOutputStream(file_out);  144.                byte[] bytes = new byte[1024];  145.                int readBye;  146.                while ((readBye = is.read(bytes)) != -1) {  147.                    os.write(bytes, 0, readBye);  148.                }  149.                is.close();  150.                os.close();  151.                ftpClient.closeServer();  152.            }  153.        } catch (Exception ex) {  154.            ex.printStackTrace();  155.        }  156.    }  157.  158.    /** 159.     * 上傳檔案 160.     * @param remotePath 161.     * @param localPath 162.     * @param filename 163.     * @throws Exception 164.     */  165.    public void uploadFile(String remotePath, String localPath, String filename) throws Exception {  166.        try {  167.            if (connectServer(ip, port, username, password)) {  168.                if (remotePath.length() != 0) {  169.                    ftpClient.cd(remotePath);  170.                }  171.                ftpClient.binary();  172.                TelnetOutputStream os = ftpClient.put(filename);  173.                File file_in = new File(localPath + File.separator + filename);  174.                FileInputStream is = new FileInputStream(file_in);  175.                byte[] bytes = new byte[1024];  176.                int readBye;  177.                while ((readBye = is.read(bytes)) != -1) {  178.                    os.write(bytes, 0, readBye);  179.                }  180.                is.close();  181.                os.close();  182.                ftpClient.closeServer();  183.            }  184.        } catch (Exception ex) {  185.            ex.printStackTrace();  186.        }  187.    }  188.  189.    /** 190.     * @return the ip 191.     */  192.    public String getIp() {  193.        return ip;  194.    }  195.  196.    /** 197.     * @param ip the ip to set 198.     */  199.    public void setIp(String ip) {  200.        this.ip = ip;  201.    }  202.  203.    /** 204.     * @return the port 205.     */  206.    public int getPort() {  207.        return port;  208.    }  209.  210.    /** 211.     * @param port the port to set 212.     */  213.    public void setPort(int port) {  214.        this.port = port;  215.    }  216.  217.    /** 218.     * @return the username 219.     */  220.    public String getUsername() {  221.        return username;  222.    }  223.  224.    /** 225.     * @param username the username to set 226.     */  227.    public void setUsername(String username) {  228.        this.username = username;  229.    }  230.  231.    /** 232.     * @return the password 233.     */  234.    public String getPassword() {  235.        return password;  236.    }  237.  238.    /** 239.     * @param password the password to set 240.     */  241.    public void setPassword(String password) {  242.        this.password = password;  243.    }  244.}  


原文:http://lgh3292.iteye.com/blog/368819

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.