java ftputil_Java中FTPUtil工具类

package net.eshui.util.ftp;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

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.UnsupportedEncodingException;

import java.util.Calendar;

import java.util.TimeZone;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPClientConfig;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;/**

* @Title:FTPUtil

* @Description:

* @Company:www.eshui.net 提供ftp 上传 下载 ,文件上传和下载需要优化downloadFile()

* uploadDirectory()*/

public classFTPUtil {privateFTPClient ftpClient;privateString IP;private intport;privateString userName;privateString password;private static final Log LOG = LogFactory.getLog(FTPUtil.class);/**

* 构造函数

*

* @param IP

* FTP服务器地址

* @param userName

* FTP服务器用户名

* @param passWord

* FTP服务器密码*/

public FTPUtil(String IP, intport, String userName, String password) {this.IP =IP;this.port =port;this.userName =userName;this.password =password;this.ftpClient = newFTPClient();

}/**

* @return 判断是否登入成功

**/

publicboolean login() {

boolean isLogin= false;

FTPClientConfig ftpClientConfig= newFTPClientConfig();

ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID());//this.ftpClient.setControlEncoding("GBK");

this.ftpClient.configure(ftpClientConfig);try{if (this.port > 0) {this.ftpClient.connect(this.IP, this.port);

}else{this.ftpClient.connect(IP);

}//FTP服务器连接回答

int reply = this.ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {this.ftpClient.disconnect();if(LOG.isDebugEnabled())

LOG.debug("登录FTP服务失败!");returnisLogin;

}this.ftpClient.login(this.userName, this.password);//设置传输协议

this.ftpClient.enterLocalPassiveMode();this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);if(LOG.isDebugEnabled())

LOG.debug("恭喜" + this.userName + "成功登陆FTP服务器");

isLogin= true;

}catch(Exception e) {

LOG.error(this.userName + "登录FTP服务失败!" +e.getMessage());

}this.ftpClient.setBufferSize(1024 * 2);this.ftpClient.setDataTimeout(3 * 1000);returnisLogin;

}/**

* 退出关闭服务器链接*/

public voidlogOut() {if (null != this.ftpClient && this.ftpClient.isConnected()) {try{

boolean reuslt= this.ftpClient.logout();//退出FTP服务器

if(reuslt) {if(LOG.isDebugEnabled())

LOG.debug("成功退出服务器");

}

}catch(IOException e) {

LOG.error("退出FTP服务器异常!" +e.getMessage());

}finally{try{this.ftpClient.disconnect();//关闭FTP服务器的连接

} catch(IOException e) {

LOG.error("关闭FTP服务器的连接异常!");

}

}

}

}/**

* 上传文件

*

* @param localFile

* 本地文件

* @param remoteUpLoadePath

* 上传路径

* @return*/

publicboolean uploadFile(String localFile, String remoteUpLoadePath) {return uploadFile(newFile(localFile), remoteUpLoadePath);

}/***

* 上传Ftp文件

*

* @param localFile

* 当地文件

* @param remoteUpLoadePath上传服务器路径

* - 应该以/结束

**/

publicboolean uploadFile(File localFile, String remoteUpLoadePath) {

BufferedInputStream inStream= null;

boolean success= false;try{

inStream= new BufferedInputStream(newFileInputStream(localFile));

createDirectory(remoteUpLoadePath);//项目集成调用StreamUtil方法来实现

if(LOG.isDebugEnabled())

LOG.debug(localFile.getName()+ "开始上传.....");

success= this.ftpClient.storeFile(localFile.getName(), inStream);if (success == true) {if(LOG.isDebugEnabled())

LOG.debug(localFile.getName()+ "上传成功");returnsuccess;

}

}catch(FileNotFoundException e) {

LOG.error(localFile+ "未找到");

}catch(IOException e) {

LOG.error("上传文件IO出错!" +e.toString());

}finally{if (inStream != null) {try{

inStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}returnsuccess;

}/***

* 上传Ftp文件

*

* @param localFile

* 当地文件

* @param remoteUpLoadePath上传服务器路径

* - 应该以/结束

**/

publicboolean uploadFile(File localFile, String remoteUpLoadePath,String fileName) {

BufferedInputStream inStream= null;

boolean success= false;try{

inStream= new BufferedInputStream(newFileInputStream(localFile));

createDirectory(remoteUpLoadePath);//项目集成调用StreamUtil方法来实现

if(LOG.isDebugEnabled())

LOG.debug(localFile.getName()+ "开始上传.....");

success= this.ftpClient.storeFile(fileName, inStream);if (success == true) {if(LOG.isDebugEnabled())

LOG.debug(localFile.getName()+ "上传成功");returnsuccess;

}

}catch(FileNotFoundException e) {

LOG.error(localFile+ "未找到");

}catch(IOException e) {

LOG.error("上传文件IO出错!" +e.toString());

}finally{if (inStream != null) {try{

inStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}returnsuccess;

}/***

* 上传Ftp文件

*

* @param in

* 数据流

* @param remoteUpLoadePath上传服务器路径

* @param file

* 存储名称

* @throws IOException

**/

public boolean uploadFile(String remoteUpLoadePath, String remotefileName, byte[] in) throws IOException {

InputStream inStream= null;

boolean success= false;try{//项目集成调用StreamUtil方法来实现

inStream = ByteArrayInputStream(in);if(LOG.isDebugEnabled())

LOG.debug(remotefileName+ "开始上传.....");this.ftpClient.changeWorkingDirectory(remoteUpLoadePath); //切换到远程目录

success = this.ftpClient.storeFile(remotefileName, inStream);if (success == true) {if(LOG.isDebugEnabled())

LOG.debug(remotefileName+ "上传成功");returnsuccess;

}

}catch(IOException e) {

LOG.error("上传文件IO出错!" +e.toString());

}finally{if (inStream != null) {try{

inStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}returnsuccess;

}/***

* 上传Ftp文件

*

* @param in

* 数据流

* @param remoteUpLoadePath上传服务器路径

* @param file

* 存储名称

* @throws IOException

**/

publicboolean uploadFile(String remoteUpLoadePath, String remoteFileName, InputStream inStream) throws IOException {//InputStream inStream = null;

boolean success = false;try{//项目集成调用StreamUtil方法来实现//inStream = ByteArrayInputStream(in);

if(LOG.isDebugEnabled())

LOG.debug(remoteFileName+ "开始上传.....");this.ftpClient.changeWorkingDirectory(remoteUpLoadePath); //切换到远程目录

success = this.ftpClient.storeFile(new String(remoteFileName.getBytes("GBK") , "iso-8859-1") , inStream);if (success == true) {if(LOG.isDebugEnabled())

LOG.debug(remoteFileName+ "上传成功");returnsuccess;

}

}catch(IOException e) {

LOG.error("上传文件IO出错!" +e.toString());

}finally{if (inStream != null) {try{

inStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}returnsuccess;

}/**

* byte 数组 转换流

*

* @param in

* @return*/

private InputStream ByteArrayInputStream(byte[] in) {

ByteArrayInputStreamis = new ByteArrayInputStream(in);return is;

}//项目集成调用StreamUtil方法来实现

private byte[] input2byte(InputStream inStream) throws IOException {

ByteArrayOutputStream swapStream= newByteArrayOutputStream();byte[] buff = new byte[1024];int rc = 0;while ((rc = inStream.read(buff, 0, 100)) > 0) {

swapStream.write(buff,0, rc);

}byte[] in2b =swapStream.toByteArray();returnin2b;

}/***

* 下载文件

*

* @param remoteFileName

* 待下载文件名称

* @param localDires

* 下载到当地那个路径下

* @param remoteDownLoadPath

* remoteFileName所在的路径

**/

publicboolean downloadFile(String localDires, String remoteFileName, String remoteDownLoadPath) {

String strFilePath= converPath(localDires) +remoteFileName;

BufferedOutputStream outStream= null;

boolean success= false;try{this.ftpClient.changeWorkingDirectory(converPath(remoteDownLoadPath));

outStream= new BufferedOutputStream(newFileOutputStream(strFilePath));if(LOG.isDebugEnabled())

LOG.debug(remoteFileName+ "开始下载....");

success= this.ftpClient.retrieveFile(remoteFileName, outStream);if (success == true) {if(LOG.isDebugEnabled())

LOG.debug(remoteFileName+ "成功下载到" +strFilePath);returnsuccess;

}

}catch(Exception e) {

LOG.error(remoteFileName+ "下载失败");

}finally{if (null !=outStream) {try{

outStream.flush();

outStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}if (success == false) {if(LOG.isDebugEnabled())

LOG.debug(remoteFileName+ "下载失败!!!");

}returnsuccess;

}/***

* 下载文件

*

* @param remoteFileName

* 待下载文件名称

* @param localDires

* 下载到当地那个路径下

* @param remoteDownLoadPath

* remoteFileName所在的路径

* @throws IOException

**/

public byte[] downloadFile(String remoteFileName, String remoteDownLoadPath) throws IOException {

InputStream inStream= null;byte[] retBytes = null;try{//Properties prop = System.getProperties();//String os = prop.getProperty("os.name");//if(os.startsWith("win") || os.startsWith("Win")){//remoteDownLoadPath = remoteDownLoadPath.replace("\\","/");//}//boolean b=ftpClient.changeWorkingDirectory("/2016");

this.ftpClient.changeWorkingDirectory(remoteDownLoadPath.trim());if(LOG.isDebugEnabled())

LOG.debug(remoteFileName+ "开始下载....");

inStream= this.ftpClient.retrieveFileStream(remoteFileName.trim());

retBytes=input2byte(inStream);

}catch(Exception e) {

LOG.error(remoteFileName+ "下载失败");

}finally{if (null !=inStream) {try{

inStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}returnretBytes;

}/***

* @上传文件夹

* @param localDirectory

* 当地文件夹

* @param remoteDirectoryPath

* Ftp 服务器路径 以目录"/"结束

* @throws IOException

* @throws UnsupportedEncodingException

**/

publicboolean uploadDirectory(String localDirectory, String remoteDirectoryPath)

throws UnsupportedEncodingException, IOException {

File src= newFile(localDirectory);

File[] allFile=src.listFiles();for (int currentFile = 0; currentFile < allFile.length; currentFile++) {if (!allFile[currentFile].isDirectory()) {

String srcName=allFile[currentFile].getPath().toString();

uploadFile(newFile(srcName), remoteDirectoryPath);

}

}for (int currentFile = 0; currentFile < allFile.length; currentFile++) {if(allFile[currentFile].isDirectory()) {//递归

String path = converPath(remoteDirectoryPath) +allFile[currentFile].getName();

createDirectory(allFile[currentFile].getName().toString());

uploadDirectory(allFile[currentFile].getPath().toString(), path);

}

}return true;

}/***

* @下载文件夹

* @param localDirectoryPath本地地址

* @param remoteDirectory

* 远程文件夹

**/

publicboolean downLoadDirectory(String localDirectoryPath, String remoteDirectory) {

remoteDirectory=converPath(remoteDirectory);

localDirectoryPath=converPath(localDirectoryPath);try{newFile(localDirectoryPath).mkdirs();

FTPFile[] allFile= this.ftpClient.listFiles(remoteDirectory);for (int currentFile = 0; currentFile < allFile.length; currentFile++) {if (!allFile[currentFile].isDirectory()) {

downloadFile(allFile[currentFile].getName(), localDirectoryPath, remoteDirectory);

}

}for (int currentFile = 0; currentFile < allFile.length; currentFile++) {if(allFile[currentFile].isDirectory()) {

String strRemoteDirectoryPath= converPath(remoteDirectory) +allFile[currentFile].getName();

String strLocalDirectoryPath= converPath(localDirectoryPath) +allFile[currentFile].getName();newFile(converPath(strLocalDirectoryPath)).mkdirs();//this.ftpClient.changeWorkingDirectory(converPath(strRemoteDirectoryPath));

downLoadDirectory(converPath(strLocalDirectoryPath), converPath(strRemoteDirectoryPath));

}

}

}catch(IOException e) {

LOG.error("下载文件夹失败!" +e.toString());return false;

}return true;

}/**

* 根据路径进行创建文件,解决兼容问题

*

* @param path

* @return

* @throws IOException

* @throws UnsupportedEncodingException*/

publicboolean createDirectory(String path) throws UnsupportedEncodingException, IOException {

path=converPath(path);

String directory= path.substring(0, path.lastIndexOf("/") + 1);if (!directory.equalsIgnoreCase("/") && !this.ftpClient.changeWorkingDirectory(directory)) {//如果远程目录不存在,则递归创建远程服务器目录

int start = 0;int end = 0;if (directory.startsWith("/")) {

start= 1;

}else{

start= 0;

}

end= directory.indexOf("/", start);while (true) {

String subDirectory=path.substring(start, end);if (!ftpClient.changeWorkingDirectory(subDirectory)) {if(ftpClient.makeDirectory(subDirectory)) {

ftpClient.changeWorkingDirectory(subDirectory);

}else{if(LOG.isDebugEnabled())

LOG.debug("创建目录失败!");return false;

}

}

start= end + 1;

end= directory.indexOf("/", start);//检查所有目录是否创建完毕

if (end <=start) {break;

}

}

}return true;

}/**

* 增加目录结尾标识“/”

*

* @param path

* @return*/

privateString converPath(String path) {if (!path.trim().endsWith("/"))

path= path + "/";returnpath;

}/**

* 读取图片 文件

*

* @param imgPath

* @return*/

public static byte[] imageToByteArray(String imgPath) {

BufferedInputStreamin;try{in = new BufferedInputStream(newFileInputStream(imgPath));

ByteArrayOutputStreamout = newByteArrayOutputStream();int size = 0;byte[] temp = new byte[1024];while ((size = in.read(temp)) != -1) {out.write(temp, 0, size);

}in.close();return out.toByteArray();

}catch(IOException e) {

e.printStackTrace();return null;

}

}/**

* 根据日期转换为路径 目录到分钟

*

* @return*/

publicString sysDate2path2minute() {

Calendar date=Calendar.getInstance();

String rootDir= "";

String path= rootDir + "/" + date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/"

+ date.get(Calendar.DAY_OF_MONTH) + "/" + date.get(Calendar.HOUR_OF_DAY) + "/"

+ date.get(Calendar.MINUTE);returnpath;

}/**

* 根据日期转换为路径 目录到小时

*

* @return*/

publicString sysDate2path2hour() {

Calendar date=Calendar.getInstance();

String rootDir= "";

String path= rootDir + "/" + date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/"

+ date.get(Calendar.DAY_OF_MONTH) + "/" + date.get(Calendar.HOUR_OF_DAY);returnpath;

}/**

* 根据日期转换为路径 目录到天

*

* @return*/

publicString sysDate2path2day() {

Calendar date=Calendar.getInstance();

String rootDir= "";

String path= rootDir + "/" + date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/"

+ date.get(Calendar.DAY_OF_MONTH);returnpath;

}/**

* * 删除文件 *

*

* @param remoteUpLoadePath

* FTP服务器保存目录 *

* @param remoteFileName

* 要删除的文件名称 *

* @return*/

publicboolean deleteFile(String remoteUpLoadePath, String remoteFileName) {

boolean flag= false;try{//切换FTP目录

this.ftpClient.changeWorkingDirectory(remoteUpLoadePath);//删除

this.ftpClient.dele(remoteFileName);

flag= true;

}catch(Exception e) {

e.printStackTrace();

}finally{if(ftpClient.isConnected()) {try{

ftpClient.disconnect();

}catch(IOException e) {

e.printStackTrace();

}

}

}returnflag;

}public static voidmain(String[] args) throws FileNotFoundException {long start =System.currentTimeMillis();for (int i = 0; i < 100; i++) {

FTPUtil ftp= new FTPUtil("192.168.1.79", 8888, "123", "12345");

ftp.login();

File file= new File("D:\\pic\\" + i % 8 + ".JPG");

InputStreamis = newFileInputStream(file);

ftp.uploadFile(file,"/home/ftp", i + ".jpg");

ftp.logOut();

System.out.println(i + "传输完成!");

}long end =System.currentTimeMillis();

System.out.println("总时间毫秒:" + (end -start));

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值