本文利用apache ftp工具實現文件的上傳下載和刪除。具體如下:
1、下載相應的jar包
commons-net-1.4.1.jar
apache-jakarta-oro-2.0.8.jar
2、其中特別需要注意的是:FTP路徑這段,例子中download爲文件路徑文件夾
flag=ftp.downloadFile("download", "001.txt", "D://mis");
3、實現代碼如下:
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import java.io.*;
import java.net.MalformedURLException;
public class FtpUtils {
//ftp服務器地址
public String hostname = "10.1.0.1";
//ftp服務器端口號默認爲21
public Integer port = 21 ;
/**
*ftp登錄賬號
*/
public String username = "user";
/**
* ftp登錄密碼
*/
public String password = "123456";
public FTPClient ftpClient = null;
/**
* 初始化ftp服務器
*/
public void initFtpClient() {
ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
try {
System.out.println("connecting...ftp服務器:"+this.hostname+":"+this.port);
//連接ftp服務器
ftpClient.connect(hostname, port);
//登錄ftp服務器
ftpClient.login(username, password);
//是否成功登錄服務器
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
System.out.println("connect failed...ftp服務器:"+this.hostname+":"+this.port);
}
System.out.println("connect successfu...ftp服務器:"+this.hostname+":"+this.port);
}catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* 改變目錄路徑
*/
public boolean changeWorkingDirectory(String directory) {
boolean flag = true;
try {
flag = ftpClient.changeWorkingDirectory(directory);
if (flag) {
System.out.println("進入文件夾" + directory + " 成功!");
} else {
System.out.println("進入文件夾" + directory + " 失敗!開始創建文件夾");
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return flag;
}
//創建多層目錄文件,如果有ftp服務器已存在該文件,則不創建,如果無,則創建
public boolean CreateDirecroty(String remote) throws IOException {
boolean success = true;
String directory = remote + "/";
// 如果遠程目錄不存在,則遞歸創建遠程服務器目錄
if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {
int start = 0;
int end = 0;
if (directory.startsWith("/")) {
start = 1;
} else {
start = 0;
}
end = directory.indexOf("/", start);
String path = "";
String paths = "";
while (true) {
String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
path = path + "/" + subDirectory;
if (!existFile(path)) {
if (makeDirectory(subDirectory)) {
changeWorkingDirectory(subDirectory);
} else {
System.out.println("創建目錄[" + subDirectory + "]失敗");
changeWorkingDirectory(subDirectory);
}
} else {
changeWorkingDirectory(subDirectory);
}
paths = paths + "/" + subDirectory;
start = end + 1;
end = directory.indexOf("/", start);
// 檢查所有目錄是否創建完畢
if (end <= start) {
break;
}
}
}
return success;
}
//判斷ftp服務器文件是否存在
public boolean existFile(String path) throws IOException {
boolean flag = false;
FTPFile[] ftpFileArr = ftpClient.listFiles(path);
if (ftpFileArr.length > 0) {
flag = true;
}
return flag;
}
//創建目錄
public boolean makeDirectory(String dir) {
boolean flag = true;
try {
flag = ftpClient.makeDirectory(dir);
if (flag) {
System.out.println("創建文件夾" + dir + " 成功!");
} else {
System.out.println("創建文件夾" + dir + " 失敗!");
}
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/** * 下載文件 *
* @param pathname FTP服務器文件目錄 *
* @param filename 文件名稱 *
* @param localpath 下載後的文件路徑 *
* @return */
public boolean downloadFile(String pathname, String filename, String localpath){
boolean flag = false;
OutputStream os=null;
try {
System.out.println("開始下載文件");
initFtpClient();
//切換FTP目錄
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
for(FTPFile file : ftpFiles){
if(filename.equalsIgnoreCase(file.getName())){
File localFile = new File(localpath + "/" + file.getName());
os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
ftpClient.logout();
flag = true;
System.out.println("下載文件成功");
} catch (Exception e) {
System.out.println("下載文件失敗");
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != os){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
/** * 刪除文件 *
* @param pathname FTP服務器保存目錄 *
* @param filename 要刪除的文件名稱 *
* @return */
public boolean deleteFile(String pathname, String filename){
boolean flag = false;
try {
System.out.println("開始刪除文件");
initFtpClient();
//切換FTP目錄
ftpClient.changeWorkingDirectory(pathname);
ftpClient.dele(filename);
ftpClient.logout();
flag = true;
System.out.println("刪除文件成功");
} catch (Exception e) {
System.out.println("刪除文件失敗");
e.printStackTrace();
} finally {
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
}
return flag;
}
/**
* 上傳文件
* @param pathname ftp服務保存地址
* @param fileName 上傳到ftp的文件名
* @param inputStream 輸入文件流
* @return
*/
public boolean uploadFile( String pathname, String fileName,InputStream inputStream){
boolean flag = false;
try{
System.out.println("開始上傳文件");
initFtpClient();
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
CreateDirecroty(pathname);
ftpClient.makeDirectory(pathname);
ftpClient.changeWorkingDirectory(pathname);
ftpClient.storeFile(fileName, inputStream);
inputStream.close();
ftpClient.logout();
flag = true;
System.out.println("上傳文件成功");
}catch (Exception e) {
System.out.println("上傳文件失敗");
e.printStackTrace();
}finally{
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
public static void main(String[] args) {
FtpUtils ftp =new FtpUtils();
boolean flag=false;
flag=ftp.downloadFile("download", "001.txt", "D://mis");
if(flag) {System.out.println("ok");}
}
}