ftp工具類
package com.zq.utils;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.Logger;
/**
*
* Ftp操作工具類,依賴:org.apache.commons.net_2.2.0.v201101241833.jar
*
* Created by MyEclipse. Author: ChenBin E-mail: [email protected] Date:
* 2016-11-3 Time: 下午7:08:10
*/
public class FtpUtils {
private static Logger log = Logger.getLogger(FtpUtils.class);
private static FTPClient ftpClient = null;
public static void main(String[] args) {
/*
* FtpUtils.init(Config.FTP_ENCODING, Config.FTP_SERVER_IP,
* Config.FTP_USERNAME, Config.FTP_PASSWORD, Config.FTP_SERVER_PORT);
* System.out.println(isDirExist("/test1")); FtpUtils.delDir("/test");
* System.out.println(FtpUtils.delFile("/test.txt"));
* FtpUtils.rename("/test.txt", "test1.txt"); String newPath =
* "/test2/1/2"; FtpUtils.createDir(newPath);
* FtpUtils.changeToPath(newPath); FtpUtils.createDir("newDir");
* FtpUtils.uploadFile("F:\\yycpjmb.xls", "yys.xls");
* FtpUtils.changeToPath("test1\\"); FtpUtils.delDir("\\a\\");
* FtpUtils.logout();
* FtpUtils.download("system\\windowsapp\\2017\\03\\",
* "WDS_17-03-01_1488364296111_ECkoQI.rar", "D:\\test.rar");
*/
}
/**
* Description : 初始化ftp服務器客戶端
*
* @author : ChenBin
* @date : 2016年12月5日 下午5:04:23
*/
public static void init(String ftpEncoding, String ftpServerIp, String uName, String pwd, int port) {
if (ftpClient == null)
ftpClient = new FTPClient();
if (!ftpClient.isConnected()) {
try {
log.info("連接FTP服務器");
ftpClient.setControlEncoding(ftpEncoding);
ftpClient.connect(ftpServerIp);
ftpClient.login(uName, pwd);
ftpClient.setDefaultPort(port);
// ftp服務器回復值
int replyCode = ftpClient.getReplyCode();
ftpClient.setDataTimeout(120000);
log.info("FTP服務器連接成功,狀態碼:"+replyCode);
} catch (SocketException e) {
e.printStackTrace();
System.err.println("登錄ftp服務器失敗,連接超時!");
log.debug("登錄ftp服務器失敗");
} catch (IOException e) {
e.printStackTrace();
System.err.println("登錄ftp服務器失敗,FTP服務器無法打開!");
log.debug("登錄ftp服務器失敗");
}
}
}
/**
* 更改當前FTP會話的工作目錄
*
* @param path:
* a/b/c
* @return
*/
public static boolean changeToPath(String path) {
try {
return ftpClient.changeWorkingDirectory(path);
} catch (IOException e) {
log.error("change working derectory failed: " + e.toString());
e.printStackTrace();
return false;
}
}
/**
* Description :將文件流輸出至ftp服務器,如果ftp目錄下已經存在同名文件將會被覆蓋
*
* @author : ChenBin
* @throws IOException
* @date : 2016年12月5日 下午9:43:42
*/
public static boolean uploadFile(FileInputStream fileStream, String remoteFileName) throws IOException {
return ftpClient.storeFile(remoteFileName, fileStream);
}
/**
* Description : 將文件對象輸出至ftp服務器,如果ftp目錄下已經存在同名文件將會被覆蓋
*
* @author : ChenBin
* @date : 2016年12月5日 下午9:44:06
*/
public static boolean uploadFile(File currentFile, String remoteFileName) {
FileInputStream bis = null;
try {
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
bis = new FileInputStream(currentFile);
return uploadFile(bis, remoteFileName);
} catch (Exception e) {
e.printStackTrace();
log.debug("file upload " + currentFile.getPath() + " failed: " + e.toString());
return false;
} finally {
if (bis != null)
try {
bis.close();
} catch (IOException e) {
log.error("FileInputStream close fail:" + e.toString());
e.printStackTrace();
}
}
}
/**
* Description : 上傳一個指定的本地文件路徑至ftp服務器當前工作目錄,如果ftp目錄下已經存在同名文件將會被覆蓋
*
* @author : ChenBin
* @date : 2016年12月5日 下午9:41:56
* @param :
* filePath-文件在本地的路徑;remoteFileName-上傳至ftp服務器的文件名
*/
public static boolean uploadFile(String currentFilePath, String remoteFileName) {
File currntFile = new File(currentFilePath);
if (currntFile.exists()) {
return uploadFile(currntFile, remoteFileName);
} else {
log.error("file: " + currentFilePath + "is not exists!");
return false;
}
}
/**
* Description : 在ftp服務器上創建一個目錄,如:a/b/c
*
* @author : ChenBin
* @date : 2016年12月5日 下午5:04:35
*/
public static boolean createDir(String path) {
try {
return ftpClient.makeDirectory(path);
} catch (IOException e) {
log.debug("create directory failed: " + e.toString());
e.printStackTrace();
return false;
}
}
/**
* Description : 重命名遠程文件/文件夾
*
* @author : ChenBin
* @date : 2016年12月5日 下午9:35:58
*/
public static boolean rename(String name, String toName) {
try {
return ftpClient.rename(name, toName);
} catch (IOException e) {
log.error("rename ftp file/dir name failed: " + e.toString());
e.printStackTrace();
return false;
}
}
/**
* Description : 刪除ftp服務器上的文件夾
*
* @author : ChenBin
* @date : 2016年12月5日 下午9:12:35
*/
public static boolean delDir(String dirPath) {
try {
return ftpClient.removeDirectory(dirPath);
} catch (IOException e) {
log.error("remove directory :" + dirPath + "failed,reson:" + e.toString());
e.printStackTrace();
return false;
}
}
/**
* Description : 刪除ftp服務器上的文件
*
* @author : ChenBin
* @date : 2016年12月5日 下午9:18:14
* @return true-刪除ftp文件成功;false-刪除ftp文件失敗
*/
public static boolean delFile(String filePaht) {
try {
return ftpClient.deleteFile(filePaht);
} catch (IOException e) {
log.error("delete file failed: " + e.toString());
e.printStackTrace();
return false;
}
}
/**
* Description : 檢查文件夾是否存在(通過判斷更改當前的工作目錄是否成功來確定文件夾是否存在)
*
* @author : ChenBin
* @date : 2016年12月5日 下午5:07:06
*/
public static boolean isDirExist(String dir) {
try {
// 獲取當前的工作目錄
String currentDirectory = ftpClient.printWorkingDirectory();
boolean isExist = ftpClient.changeWorkingDirectory(dir);
// 切換回之前的工作目錄
ftpClient.changeWorkingDirectory(currentDirectory);
return isExist;
} catch (IOException e) {
log.error("check ftp dir exist failed: " + e.toString());
e.printStackTrace();
return false;
}
}
/**
* Description : 斷開ftp登錄
*
* @author : ChenBin
* @date : 2016年12月5日 下午4:53:46
*/
public static void logout() {
try {
if (ftpClient != null) {
ftpClient.logout();
ftpClient.disconnect();
log.debug("ftp server logout! isConnected:" + ftpClient.isConnected());
log.debug("FTP服務器斷開連接");
}
} catch (Exception e) {
log.error("ftp logout failed:" + e.toString());
e.printStackTrace();
}
}
public static void download(String remotePath, String remoteFileName, String localPath) {
BufferedOutputStream outStream = null;
try {
log.info("從FTP服務器開始下載文件");
ftpClient.changeWorkingDirectory(remotePath);
outStream = new BufferedOutputStream(new FileOutputStream(localPath));
ftpClient.retrieveFile(remoteFileName, outStream);
log.info("從FTP服務器下載文件結束");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != outStream) {
try {
outStream.flush();
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* 復制單個文件
*
* @param oldPath
* String 原文件路徑 如:c:/fqf.txt
* @param newPath
* String 復制後路徑 如:f:/fqf.txt
* @return boolean
*/
public static void copyFile(String oldPath, String newPath) {
InputStream inStream = null;
FileOutputStream fs = null;
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { // 文件存在時
inStream = new FileInputStream(oldPath); // 讀入原文件
fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
// int length = 0;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; // 字節數 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
}
} catch (Exception e) {
System.out.println("復制單個文件操作出錯");
e.printStackTrace();
} finally {
try {
inStream.close();
fs.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
ftp工具類