ftp java编程_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;

}

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值