使用jar包:commons-net-1.4.0.jar,jakarta-oro-2.0.8.jar
代码如下(自己电脑自测(自测的话电脑需要设置FTP共享目录,百度教程即可),使用时修改FTP链接信息即可):
package com.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FTPTest {
public static void main(String[] args) throws UnsupportedEncodingException {
//uploadTest();//上传测试
downloadTest();//下载测试
}
public static void downloadTest(){
String hostName="127.0.0.1";
int port=21;
String userName="Along";
String password="123456";
String fileName="ftpTest.txt"; //服务器上存放的文件名
String pathName="/public/txt/"; //服务器上存放文件的目录
//String name=new String(pathName.getBytes("GBK"),"iso-8859-1");// 转换后的目录名或文件名。
String originFileName="E:/ftpFile/download"; //下载的文件存放路径
String newFileName="ftp123.txt"; //下载的文件本地保存时更改成该名
//boolean flag=downloadFile(hostName, port, userName, password, pathName, fileName, originFileName);
boolean flag=downloadFile(hostName, port, userName, password, pathName, fileName, newFileName, originFileName);
if(flag){
System.out.println("OK!");
}else{
System.out.println("No!");
}
System.out.println("000000");
}
public static void uploadTest(){
String hostName="127.0.0.1";
int port=21;
String userName="Along";
String password="123456";
String fileName="ftpTest.txt"; //服务器上存放的文件名
String pathName="/public/txt"; //服务器上存放的目录,没有的话新建
//String name=new String(pathName.getBytes("GBK"),"iso-8859-1");// 转换后的目录名或文件名。
String originFileName="E:\\ftpFile\\123.txt"; //被上传文件路径,本地绝对路径
boolean flag=uploadFileFromProduction(hostName, port, userName, password, pathName, fileName, originFileName);
//boolean flag=uploadFileFromProduction(hostName, port, userName, password, pathName, originFileName);
if(flag){
System.out.println("OK!");
}else{
System.out.println("No!");
}
System.out.println("000000");
}
/**
* * 下载文件 * 可更改文件名
* @param hostname FTP服务器地址 *
* @param port FTP服务器端口号 *
* @param username FTP登录帐号 *
* @param password FTP登录密码 *
* @param pathname FTP服务器文件目录 *
* @param filename 文件名称 *
* @param localpath 下载后的文件路径 *
* @return
*/
public static boolean downloadFile(String hostname, int port,
String username, String password, String pathname, String filename,
String newFileName, String localpath) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
try {
// 连接FTP服务器
ftpClient.connect(hostname, port);
// 登录FTP服务器
ftpClient.login(username, password);
// 验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
return flag;
}
// 切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
for (FTPFile file : ftpFiles) {
if (filename.equalsIgnoreCase(file.getName())) {
File localFile = new File(localpath + "/" + newFileName);
File file1=new File(localpath);
if(!file1.exists()){ //本地存放目录如果不存在则新建
file1.mkdirs();
}
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
/**
* * 下载文件 * 不可更改文件名
* @param hostname FTP服务器地址 *
* @param port FTP服务器端口号 *
* @param username FTP登录帐号 *
* @param password FTP登录密码 *
* @param pathname FTP服务器文件目录 *
* @param filename 文件名称 *
* @param localpath 下载后的文件路径 *
* @return
*/
public static boolean downloadFile(String hostname, int port,
String username, String password, String pathname, String filename,
String localpath) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
try {
// 连接FTP服务器
ftpClient.connect(hostname, port);
// 登录FTP服务器
ftpClient.login(username, password);
// 验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
return flag;
}
// 切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
for (FTPFile file : ftpFiles) {
if (filename.equalsIgnoreCase(file.getName())) {
File localFile = new File(localpath + "/" + file.getName());
File file1=new File(localpath);
if(!file1.exists()){ //本地存放目录如果不存在则新建
file1.mkdirs();
}
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
/*
* 上传文件
* @param hostname ftp服务器地址
* @param port ftp服务器端口号
* @param username ftp登录账号
* @param password ftp登录密码
* @param pathname ftp服务保存地址
* @param fileName 上传到ftp的文件名
* @param inputStream 输入文件流
* @return
*/
public static boolean uploadFile(String hostname, int port,
String username, String password, String pathname, String fileName,
InputStream inputStream) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
try {
ftpClient.connect(hostname, port); // 连接ftp服务器
ftpClient.login(username, password); // 登录ftp服务器
int replyCode = ftpClient.getReplyCode(); // 是否成功登录服务器
if (!FTPReply.isPositiveCompletion(replyCode)) {
return flag;
}
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
// make directory
if (pathname != null && !"".equals(pathname.trim())) {
String[] pathes = pathname.split("/");
for (String onepath : pathes) {
if (onepath == null || "".equals(onepath.trim())) {
continue;
}
//FTP默认iso-8859-1编码,防止中文乱码
onepath=new String(onepath.getBytes("GBK"),"iso-8859-1");
if (!ftpClient.changeWorkingDirectory(onepath)) {
ftpClient.makeDirectory(onepath);
ftpClient.changeWorkingDirectory(onepath);
}
}
}
//FTP不能创建多级目录,所以要分级创建,以下代码不能用
//ftpClient.makeDirectory(pathname);
//ftpClient.changeWorkingDirectory(pathname);
//FTP默认iso-8859-1编码,防止中文乱码
ftpClient.storeFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), inputStream); // 转换后的目录名或文件名。
inputStream.close();
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
/**
* * 上传文件(可对文件进行重命名) *
* @param hostname FTP服务器地址 *
* @param port FTP服务器端口号 *
* @param username FTP登录帐号 *
* @param password FTP登录密码 *
* @param pathname FTP服务器保存目录 *
* @param filename 上传到FTP服务器后的文件名称 *
* @param originfilename 待上传文件的名称(绝对地址) *
* @return
*/
public static boolean uploadFileFromProduction(String hostname, int port,
String username, String password, String pathname, String filename,
String originfilename) {
boolean flag = false;
try {
InputStream inputStream = new FileInputStream(new File(
originfilename));
flag = uploadFile(hostname, port, username, password, pathname,
filename, inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 上传文件(不可以进行文件的重命名操作) *
* @param hostname FTP服务器地址 *
* @param port FTP服务器端口号 *
* @param username FTP登录帐号 *
* @param password FTP登录密码 *
* @param pathname FTP服务器保存目录 *
* @param originfilename 待上传文件的名称(绝对地址) *
* @return
*/
public static boolean uploadFileFromProduction(String hostname, int port,
String username, String password, String pathname,
String originfilename) {
boolean flag = false;
try {
String fileName = new File(originfilename).getName();//改名操作
InputStream inputStream = new FileInputStream(new File(
originfilename));
flag = uploadFile(hostname, port, username, password, pathname,
fileName, inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* * 删除文件 *
* @param hostname FTP服务器地址 *
* @param port FTP服务器端口号 *
* @param username FTP登录帐号 *
* @param password FTP登录密码 *
* @param pathname FTP服务器保存目录 *
* @param filename 要删除的文件名称 *
* @return
*/
public static boolean deleteFile(String hostname, int port,
String username, String password, String pathname, String filename) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
try {
// 连接FTP服务器
ftpClient.connect(hostname, port);
// 登录FTP服务器
ftpClient.login(username, password);
// 验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
return flag;
}
// 切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
ftpClient.dele(filename);
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
}