欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java編寫ftp下載工具

 更新時間:2015年03月25日 14:25:33   投稿:hebedich  
本文給大家介紹的是如何一步步實現(xiàn)使用java編寫FTP下載工具,而且是在Linux環(huán)境下使用javac編譯的,在運行和編譯上有些不同之處,有需要的小伙伴們參考下吧。

需要用到 java 寫一個 ftp 的工具,因為只有一點點 java 基礎,但是由于好幾年不用,幾乎算是不會了,只好一點點來搞,還好能撿起來。

不過因為是在 Linux 下使用 javac 編譯,不是在 WIN 下使用 IDE 來做這些事情,所以在運行和編譯上又費了一些時間,不過正是因為這樣對 JAVA 的一些編譯、運行的知識又了解了一些。

對于 ftp 下載工具,代碼如下:

復制代碼 代碼如下:

import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.SocketException;  
import org.apache.commons.net.ftp.FTPClient;  
import org.apache.commons.net.ftp.FTPReply;  
public class FtpClient {
    private String         host;  
    private int            port;  
    private String         username;  
    private String         password;  
    private boolean        binaryTransfer = true;  
    private boolean        passiveMode    = true;  
    private String         encoding       = "UTF-8";  
    private int            clientTimeout  = 3000;  
    private boolean flag=true;
    private FTPClient ftpClient = null;
    public String getHost() {  
        return host;  
    }  
    public void setHost(String host) {  
        this.host = host;  
    }  
    public int getPort() {  
        return port;  
    }  
    public void setPort(int port) {  
        this.port = port;  
    }  
    public String getUsername() {  
        return username;  
    }  
    public void setUsername(String username) {  
        this.username = username;  
    }  
    public String getPassword() {  
        return password;  
    }  
    public void setPassword(String password) {  
        this.password = password;  
    }  
    public boolean isBinaryTransfer() {  
        return binaryTransfer;  
    }  
    public void setBinaryTransfer(boolean binaryTransfer) {  
        this.binaryTransfer = binaryTransfer;  
    }  
    public boolean isPassiveMode() {  
        return passiveMode;  
    }  
    public void setPassiveMode(boolean passiveMode) {  
        this.passiveMode = passiveMode;  
    }  
    public String getEncoding() {  
        return encoding;  
    }  
    public void setEncoding(String encoding) {  
        this.encoding = encoding;  
    }  
    public int getClientTimeout() {  
        return clientTimeout;  
    }  
    public void setClientTimeout(int clientTimeout) {  
        this.clientTimeout = clientTimeout;  
    }  
    public FtpClient(String Host) {
        this.username = "anonymous";
        this.encoding = "utf-8";
        this.binaryTransfer = true;
        this.binaryTransfer = true;
        this.port = 21;
        this.host = Host;
        try {
            this.ftpClient = getFTPClient();
        } catch (Exception e) {
            System.out.println("Create FTPClient error!");
        }
    }
    private FTPClient getFTPClient() throws IOException {  
        FTPClient ftpClient = new FTPClient();
        ftpClient.setControlEncoding(encoding);
        connect(ftpClient);
        if (passiveMode) {  
            ftpClient.enterLocalPassiveMode();  
        }  
        setFileType(ftpClient);
        try {  
            ftpClient.setSoTimeout(clientTimeout);  
        } catch (SocketException e) {  
            throw new IOException("Set timeout error.", e);  
        }  
        return ftpClient;  
    }  
    private void setFileType(FTPClient ftpClient) throws IOException {  
        try {  
            if (binaryTransfer) {  
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
            } else {  
                ftpClient.setFileType(FTPClient.ASCII_FILE_TYPE);  
            }  
        } catch (IOException e) {  
            throw new IOException("Could not to set file type.", e);  
        }  
    }  
    public boolean connect(FTPClient ftpClient) throws IOException {  
        try {  
            ftpClient.connect(host, port);  
            int reply = ftpClient.getReplyCode();  
            if (FTPReply.isPositiveCompletion(reply)) {  
                if (ftpClient.login(username, password)) {  
                    setFileType(ftpClient);  
                    return true;  
                }  
            } else {  
                this.ftpClient.disconnect();  
                throw new IOException("FTP server refused connection.");  
            }  
        } catch (IOException e) {  
            if (this.ftpClient.isConnected()) {  
                try {  
                    this.ftpClient.disconnect();
                } catch (IOException e1) {  
                    throw new IOException("Could not disconnect from server.", e);  
                }  
            }  
            throw new IOException("Could not connect to server.", e);  
        }  
        return false;  
    }  
    private void disconnect() throws IOException {  
        try {  
            this.ftpClient.logout();  
        } catch (IOException e) {  
            System.out.println("logout may timeout!");
        } finally {
            if (this.ftpClient.isConnected()) {  
                this.ftpClient.disconnect();  
            }  
        } 
    }  
    public InputStream getStream(String serverFile) throws IOException {
        InputStream inStream = null;
        try {
            inStream = this.ftpClient.retrieveFileStream(serverFile);
            System.out.println("inStream get over!");
            return inStream;
        } catch (IOException e) {
            System.out.println("get stream exception");
            return null;
        }
    }
    public boolean writeStream(InputStream input, String localFile) throws IOException {
        FileOutputStream fout = new FileOutputStream(localFile);
        int ch = 0;
        if(input == null){
            System.out.println("input is null");
            return false;
        }
        try {
            ch = input.read();
            while(ch != -1){
                fout.write(ch);
                ch = input.read();
            }
            System.out.println("write over!");
            return flag;
        } catch (IOException e) {
            throw new IOException("Couldn't get file from server.", e);
        }
    }
    public boolean isExist(String remoteFilePath)throws IOException{
        try{
            File file=new File(remoteFilePath);
            String remotePath=remoteFilePath.substring(0,(remoteFilePath.indexOf(file.getName())-1));
            String[] listNames = this.ftpClient.listNames(remotePath);  
            System.out.println(remoteFilePath);
            for(int i=0;i<listNames.length;i++){
                System.out.println(listNames[i]);
                if(remoteFilePath.equals(listNames[i])){
                    flag=true;
                    System.out.println("file:"+file.getName()+" existed");
                    break;
                }else {
                    flag=false;
                }
            }
        } catch (IOException e) {  
            throw new IOException("FILE EXCEPTION", e);  
        }
        return flag;
    }
    //main for testing
    public static void main(String[] args) throws IOException {  
        String hostname = "cp01-testing-ps7130.cp01.baidu.com";
        String serverFile="/home/work/check_disk.sh";
        String localFile="/home/work/workspace/project/dhc2-0/dhc/base/ftp/task_get";
        FtpClient ftp = new FtpClient(hostname);  
        System.out.println(ftp.isExist(serverFile));
        ftp.writeStream(ftp.getStream(serverFile), localFile);
        ftp.disconnect();
    }  
}

這個工具是為了配合另外一個 Hadoop 工具做 集群上傳用的,所以里面的把 input 和 output 流分開了,也是為了方便另外一個工具使用。

補充一點,如何在 linux 配置運行:

如果這樣的代碼需要在 linux 下環(huán)境運行,首先要配置好響應的包,例如

復制代碼 代碼如下:

import org.apache.commons.net.ftp.FTPClient;

這個包在 apache 的網(wǎng)站上直接下載就行,解壓后找到對應的 jar 包,在編譯的時候進行引用:

復制代碼 代碼如下:

export FTPPATH="${路徑}/xxx.jar"
javac -classpath $CLASSPATH:$FTPPATH FtpClient.java

同樣,在運行的時候也要指定 classpath:

復制代碼 代碼如下:

java -classpath $CLASSPATH:$FTPPATH FtpClient

建議不要把$FTPPATH 包含在 CLASSPATH 中,用什么包就引用什么環(huán)境變量就行了,沒必要一股腦都添加進去,就像我們沒必要 import 所有的包一樣。

以上所述就是本文的全部內(nèi)容了,希望能夠?qū)Υ蠹覍W習java有所幫助。

請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支持!

相關文章

  • springboot?@PostConstruct無效的解決

    springboot?@PostConstruct無效的解決

    這篇文章主要介紹了springboot?@PostConstruct無效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • IDEA插件Statistic統(tǒng)計代碼快速分辨爛項目

    IDEA插件Statistic統(tǒng)計代碼快速分辨爛項目

    這篇文章主要為大家介紹了使用IDEA插件Statistic來統(tǒng)計項目代碼,幫助大家快速識別出爛項目,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01
  • 基于Java實現(xiàn)的Dijkstra算法示例

    基于Java實現(xiàn)的Dijkstra算法示例

    這篇文章主要介紹了基于Java實現(xiàn)的Dijkstra算法示例,一個比較典型的算法示例,需要的朋友可以參考下
    2014-07-07
  • Java 將Excel轉為OFD格式(方法步驟)

    Java 將Excel轉為OFD格式(方法步驟)

    OFD是一種開放版式文檔是我國國家版式文檔格式標準,本文通過Java后端程序代碼展示如何將Excel轉為OFD格式,分步驟給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2021-12-12
  • Spring Cloud Feign接口返回流的實現(xiàn)

    Spring Cloud Feign接口返回流的實現(xiàn)

    這篇文章主要介紹了Spring Cloud Feign接口返回流的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Java的System.getProperty()方法獲取大全

    Java的System.getProperty()方法獲取大全

    這篇文章主要介紹了Java的System.getProperty()方法獲取大全,羅列了System.getProperty()方法獲取各類信息的用法,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • 關閉支付寶小額免密支付步驟詳解

    關閉支付寶小額免密支付步驟詳解

    支付寶現(xiàn)在作為我們?nèi)粘I钪凶畛S玫膽弥?,已?jīng)成為了人們的虛擬錢包。但是最近,有人發(fā)現(xiàn)了支付寶的一個漏洞,本文將對如何關閉小額免密支付進行步驟介紹。下面跟著小編一起來看下吧
    2017-01-01
  • Java面向?qū)ο笾畠?nèi)部類案例講解

    Java面向?qū)ο笾畠?nèi)部類案例講解

    這篇文章主要介紹了Java面向?qū)ο笾畠?nèi)部類案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java中的內(nèi)存模型JMM詳細解讀

    Java中的內(nèi)存模型JMM詳細解讀

    這篇文章主要介紹了Java中的內(nèi)存模型JMM詳細解讀,Java?對內(nèi)存的抽象模型如下,每個線程都有一塊自己的私有內(nèi)存(也稱為工作內(nèi)存),當線程使用變量時,會把主內(nèi)存里面的變量復制到工作內(nèi)存,線程讀寫變量時操作的是自己工作內(nèi)存中的變量,需要的朋友可以參考下
    2023-12-12
  • 優(yōu)化spring?boot應用后6s內(nèi)啟動內(nèi)存減半

    優(yōu)化spring?boot應用后6s內(nèi)啟動內(nèi)存減半

    這篇文章主要為大家介紹了優(yōu)化spring?boot后應用6s內(nèi)啟動內(nèi)存減半的優(yōu)化示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-02-02

最新評論