使用ftp下载单个文件例子。
1.安装ftp服务
2.导入相应的jar
commons-net-1.4.1.jar
3.编码
如下是本人写的一个例子:
package org.ftp.test;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
/**
* FTP
* @author gong
*
*/
public class FtpUtil {
/**
* 获取FTP连接
*
* @param ip
* ip地址
* @param account
* 账户
* @param password
* 密码
* @return ftp连接
*/
public static FTPClient login(String ip, String account, String password) {
FTPClient ftp = null;
try {
ftp = new FTPClient();
ftp.setDefaultTimeout(10000);
ftp.connect(ip, 21);
boolean status = ftp.login(account, password);
System.out.println("login:"+status);
if (status == false) {
throw new Exception("login status false");
}
ftp.enterLocalPassiveMode();
ftp.setBufferSize(1024);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
} catch (Exception ex1) {
closeFTP(ftp);
return null;
}
return ftp;
}
/**
* 关闭FTP
*
* @param ftp
* ftp连接
*/
public static void closeFTP(FTPClient ftp) {
try {
if (ftp != null) {
ftp.logout();
ftp.disconnect();
ftp = null;
}
} catch (Exception ex3) {
ex3.printStackTrace();
}
}
/**
* 下载
* @param ftp
* @param remote
* @param local
* @return
*/
public static boolean download(FTPClient ftp ,String remote, String local) {
System.out.println("remote:"+remote);
System.out.println("local:"+local);
ftp.enterLocalPassiveMode();
boolean result = false;
try {
File f = new File(local);
System.out.println("f.exists():"+f.exists());
if (f.exists()) {
//输入文件信息
//此处false用意在意把当前f对象的缓存清空,这样f.length()就为0
//OutputStream out = new FileOutputStream(f, false);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f));
System.out.println("f.length():"+f.length());
//
ftp.setRestartOffset(f.length());
result = ftp.retrieveFile(remote, out);
out.close();
} else {
OutputStream out = new FileOutputStream(f);
result = ftp.retrieveFile(remote, out);
out.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
return result;
}
/**
* 测试方法
* @param args
*/
public static void main(String[] args){
try {
//ip:10.251.186.20
//ftp:用户名(ethan)和密码(ethan)
FTPClient ftp = FtpUtil.login("10.251.186.20", "ethan", "ethan");
System.out.println("ft:"+ftp);
//下载test1.log文件,信息将写到到F:/software/Ser-U-data/test2.log中
//如果不指定写文件名称,则bool值将会返回false,则不成功,必须指定要写入的文件名称
boolean bool=FtpUtil.download(ftp, "F:/software/Ser-U-data/test1.log", "F:/software/Ser-U-data2/test2.log");
System.out.println("bool:"+bool);
FtpUtil.closeFTP(ftp);
} catch (Exception e) {
}
}
}