激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java編寫ftp下載工具

java編寫ftp下載工具

2019-12-13 10:48hebedich JAVA教程

本文給大家介紹的是如何一步步實現使用java編寫FTP下載工具,而且是在Linux環境下使用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 下環境運行,首先要配置好響應的包,例如

 

復制代碼代碼如下:

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

 

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

 

復制代碼代碼如下:

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

 

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

 

復制代碼代碼如下:

java -classpath $CLASSPATH:$FTPPATH FtpClient

 

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

以上所述就是本文的全部內容了,希望能夠對大家學習java有所幫助。

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

延伸 · 閱讀

精彩推薦
  • JAVA教程java實現高效的枚舉元素集合示例

    java實現高效的枚舉元素集合示例

    Set是Java集合類的重要組成部分,它用來存儲不能重復的對象。枚舉類型也要求其枚舉元素各不相同。看起來枚舉類型和集合是很相似的。然而枚舉類型中的...

    java教程網3102019-11-12
  • JAVA教程JAVA中JNI的簡單使用分享

    JAVA中JNI的簡單使用分享

    這篇文章介紹了JAVA中JNI的簡單使用,有需要的朋友可以參考一下 ...

    java技術網3542019-10-15
  • JAVA教程Java中的2種集合排序方法介紹

    Java中的2種集合排序方法介紹

    這篇文章主要介紹了Java中的2種集合排序方法介紹,本文直接給出代碼,相關說明請看代碼中的注釋,需要的朋友可以參考下 ...

    shijiebei20091532019-12-01
  • JAVA教程Java函數式編程(十一):遍歷目錄

    Java函數式編程(十一):遍歷目錄

    這篇文章主要介紹了Java函數式編程(十一):遍歷目錄,本文是系列文章的第11篇,其它文章請參閱本文底部的相關文章,需要的朋友可以參考下 ...

    有孚3962019-12-01
  • JAVA教程JAVA操作XML實例分析

    JAVA操作XML實例分析

    這篇文章主要介紹了JAVA操作XML的方法,實例分析了java操作XML文件的常用技巧,需要的朋友可以參考下 ...

    瘋狂的流浪4382019-12-12
  • JAVA教程java實現策略模式使用示例

    java實現策略模式使用示例

    在使用圖像處理軟件處理圖片后,需要選擇一種格式進行保存。然而各種格式在底層實現的算法并不相同,這剛好適合策略模式。編寫程序,演示如何使用...

    java教程網1372019-11-08
  • JAVA教程Java中的關鍵字volatile詳解

    Java中的關鍵字volatile詳解

    這篇文章主要介紹了Java中的關鍵字volatile,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小...

    陽光、大地和詩歌4862019-06-19
  • JAVA教程java隨機生成字符串(字符隨機生成類 生成隨機字符組合)

    java隨機生成字符串(字符隨機生成類 生成隨機字符組合)

    java隨機生成字符串,字符組合多樣,可以大小字組合、大+小字符+數字等方式,大家參考使用吧 ...

    java技術網1502019-10-26
主站蜘蛛池模板: 精品少妇v888av | 性少妇videosexfreexx | 亚洲骚综合 | 久国产精品视频 | 日本精品婷婷久久爽一下 | 91性视频 | 亚洲一区二区三区高清视频 | 午夜视 | 精品一区二区三区免费视频 | 久啪视频 | 欧美一区二区三区四区五区动图 | 91福利在线观看 | 在线观看欧美成人 | 成av在线| 久久精品一区视频 | 欧美黄成人免费网站大全 | 毛片在哪看| 欧美在线成人影院 | 国产精品午夜未成人免费观看 | 亚洲成a| 久久观看| 精品一区二区三区免费毛片爱 | 久久天堂| 国产成人高清在线观看 | 草草视频在线播放 | 久久久www成人免费毛片 | 久久综合给合久久狠狠狠97色69 | av在线电影网 | v11av在线播放| 久久艹一区| 久久国产精品久久久久久 | 国产免费一区二区三区网站免费 | 午夜影院a | 亚洲国产精品久久久久久久久久久 | 国产一区二区成人在线 | 国产欧美在线观看不卡一 | 中文字幕在线一 | 国产1区在线观看 | 黄色片免费看看 | 亚洲自拍第二页 | 天天色图片 |