成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java 寫的 ftp 下載工具

leone / 1783人閱讀

摘要:需要用到寫一個(gè)的工具,因?yàn)橹挥幸稽c(diǎn)點(diǎn)基礎(chǔ),但是由于好幾年不用,幾乎算是不會(huì)了,只好一點(diǎn)點(diǎn)來搞,還好能撿起來。對(duì)于下載工具,代碼如下這個(gè)工具是為了配合另外一個(gè)工具做集群上傳用的,所以里面的把和流分開了,也是為了方便另外一個(gè)工具使用。

需要用到 java 寫一個(gè) ftp 的工具,因?yàn)橹挥幸稽c(diǎn)點(diǎn) java 基礎(chǔ),但是由于好幾年不用,幾乎算是不會(huì)了,只好一點(diǎn)點(diǎn)來搞,還好能撿起來。

不過因?yàn)槭窃?Linux 下使用 javac 編譯,不是在 WIN 下使用 IDE 來做這些事情,所以在運(yùn)行和編譯上又費(fèi)了一些時(shí)間,不過正是因?yàn)檫@樣對(duì) JAVA 的一些編譯、運(yùn)行的知識(shí)又了解了一些。

對(duì)于 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

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

補(bǔ)充一點(diǎn),如何在 linux 配置運(yùn)行:

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

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

這個(gè)包在 apache 的網(wǎng)站上直接下載就行,解壓后找到對(duì)應(yīng)的 jar 包,在編譯的時(shí)候進(jìn)行引用:

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

同樣,在運(yùn)行的時(shí)候也要指定 classpath:

java -classpath $CLASSPATH:$FTPPATH FtpClient

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64279.html

相關(guān)文章

  • 一、python與pycharm的安裝

    摘要:是面向?qū)ο笳Z言這意味著支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對(duì)象的編程技術(shù)。在上執(zhí)行命令,就可以進(jìn)入到的交互模式,并顯示出版本等信息。選擇的版本,需要下載安裝包,然后進(jìn)行安裝。 一、Python簡介 Python 是一種解釋型語言: 這意味著開發(fā)過程中沒有了編譯這個(gè)環(huán)節(jié)。類似于PHP和Perl語言。 Python 是交互式語言: 這意味著,您可以在一個(gè)Python提示符,直接互動(dòng)執(zhí)行寫你的程...

    awokezhou 評(píng)論0 收藏0
  • HADOOP集群文件上傳下載

    摘要:對(duì)上的文件進(jìn)行上傳和下載是對(duì)集群的基本操作,在權(quán)威指南一書中,對(duì)文件的上傳和下載都有代碼的實(shí)例,但是對(duì)如何配置客戶端卻是沒有講得很清楚,經(jīng)過長時(shí)間的搜索和調(diào)試,總結(jié)了一下,如何配置使用集群的方法,以及自己測試可用的對(duì)集群上的文件進(jìn)行操作的程 對(duì)HDFS上的文件進(jìn)行上傳和下載是對(duì)集群的基本操作,在《HADOOP權(quán)威指南》一書中,對(duì)文件的上傳和下載都有代碼的實(shí)例,但是對(duì)如何配置HADOOP...

    nevermind 評(píng)論0 收藏0
  • Nginx 搭建圖片服務(wù)器

    摘要:搭建圖片服務(wù)器本章內(nèi)容通過和搭建圖片服務(wù)器。第二個(gè)部分是為了更好的體驗(yàn)上傳,批量上傳,回顯功能的富文本編輯器??偨Y(jié)搭建服務(wù)器的思維實(shí)現(xiàn)上傳圖片的功能上傳圖片的功能源碼搭建圖片服務(wù)器到這里就結(jié)束了,有什么不足的地方,請(qǐng)賜教。 Nginx 搭建圖片服務(wù)器 本章內(nèi)容通過Nginx 和 FTP 搭建圖片服務(wù)器。在學(xué)習(xí)本章內(nèi)容前,請(qǐng)確保您的Linux 系統(tǒng)已經(jīng)安裝了Nginx和Vsftpd。 N...

    jas0n 評(píng)論0 收藏0
  • 【譯】PHP:40+開發(fā)工具推薦

    摘要:今天,就為開發(fā)者介紹個(gè)方便的工具。對(duì)開發(fā)者來說,是一個(gè)非常有用的工具,它提供了超過個(gè)有用的函數(shù)。該工具檢查輸入源代碼和報(bào)告任何違反給定的標(biāo)準(zhǔn)??蚣苁且粋€(gè)開發(fā)的工具。它側(cè)重于安全性和性能,絕對(duì)是最安全的開發(fā)框架之一。 PHP是為Web開發(fā)設(shè)計(jì)的服務(wù)器腳本語言,但也是一種通用的編程語言。超過2.4億個(gè)索引域使用PHP,包括很多重要的網(wǎng)站,例如Facebook、Digg和WordPress。...

    dreambei 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<