java编写ftp下载工具

网友投稿 232 2023-08-03


java编写ftp下载工具

需要用到 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;  

    }&nbhttp://sp; 

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

        }  

&fIHWsnbsp;       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

                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有所帮助。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

                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有所帮助。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用python实现正则匹配检索远端FTP目录下的文件
下一篇:java自动生成ID号的方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~