/**
*FTP操作类
*/
public class FTPTools {
private String uid;
private String pwd;
private String hostname;
private boolean binaryTransfer = true;
private int port = 21;
public FTPTools( String uid, String pwd, String hostname) {
this.uid = uid;
this.pwd = pwd;
this.hostname = hostname;
}
public FTPTools( String uid, String pwd, String hostname, int port) {
this.uid = uid;
this.pwd = pwd;
this.hostname = hostname;
this.port = port;
}
public boolean isBinaryTransfer() {
return binaryTransfer;
}
public void setBinaryTransfer(boolean binaryTransfer) {
this.binaryTransfer = binaryTransfer;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
private FTPClient ftpClient = null;
private SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd hh:mm");
private final String[] FILE_TYPES = { "文件", "目录", "符号链接", "未知类型" };
/**
* 设置FTP客服端的配置--一般可以不设置
* @return
*/
private FTPClientConfig getFtpConfig() {
FTPClientConfig ftpConfig = new FTPClientConfig(
FTPClientConfig.SYST_UNIX);
ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);
return ftpConfig;
}
/**
* 连接到服务器
* @throws IOException
*/
public void openConnect() {
int reply;
try {
// setArg(configFile);
ftpClient = new FTPClient();
ftpClient.setDefaultPort(port);
ftpClient.configure(getFtpConfig());
ftpClient.connect(hostname);
ftpClient.login(uid, pwd);
ftpClient.setControlEncoding("GB18030");
System.out.print(ftpClient.getReplyString());
reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
// user.writeLog("【FTPTools】:FTP server refused connection.");
System.out.println("【FTPTools】:FTP server refused connection.");
} else {
if (ftpClient.login(uid, pwd)) {
// 设置为passive模式
ftpClient.enterLocalPassiveMode();
}
// user.writeLog("【FTPTools】:登录ftp服务器[" + hostname+ "]成功");
System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]成功");
System.out.println("【FTPTools】:当前目录为"
+ ftpClient.printWorkingDirectory());
// user.writeLog("【FTPTools】:当前目录为" +
// ftpClient.printWorkingDirectory());
}
} catch (Exception e) {
// user.writeLog("【FTPTools】:登录ftp服务器[" + hostname + "]失败");
System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]失败");
e.printStackTrace();
}
}
/**
* 关闭链接 实现1
*/
public void close()
{
try
{
if(ftpClient!=null&&ftpClient.serverIsOpen())
ftpClient.closeServer();
}catch(Exception e){e.printStackTrace();}
}
/**
* 关闭连接 实现2
*/
public void closeConnect() {
try {
if (ftpClient != null) {
ftpClient.logout();
System.out.print(ftpClient.getReplyString());
ftpClient.disconnect();
// user.writeLog("【FTPTools】:断开ftp服务器[" + hostname + "]成功");
System.out.println("【FTPTools】:断开ftp服务器[" + hostname + "]成功");
} else {
System.out.println("【FTPTools】:已经断开ftp服务器[" + hostname + "]");
// user.writeLog("【FTPTools】:已经断开ftp服务器[" + hostname + "]");
}
} catch (Exception e) {
e.printStackTrace();
// user.writeLog("【FTPTools】:断开ftp服务器[" + hostname + "]失败");
System.out.println("【FTPTools】:断开ftp服务器[" + hostname + "]失败");
}
}
/**
* 进入到服务器的某个目录下
* @param directory
*/
public void changeWorkingDirectory(String directory) {
try {
if (ftpClient == null) {
openConnect();
}
ftpClient.changeWorkingDirectory(directory);
System.out.print(ftpClient.getReplyString());
System.out.println("【FTPTools】:进入目录" + directory);
System.out.println("【FTPTools】:当前目录为"
+ ftpClient.printWorkingDirectory());
// user.writeLog("【FTPTools】:当前目录为" +
// ftpClient.printWorkingDirectory());
// user.writeLog(ftpClient.getReplyString());
// user.writeLog("【FTPTools】:进入目录" + directory);
} catch (IOException ioe) {
ioe.printStackTrace();
// user.writeLog(ioe);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回到上一层目录
*/
public void changeToParentDirectory() {
try {
if (ftpClient == null) {
openConnect();
}
ftpClient.changeToParentDirectory();
System.out.print(ftpClient.getReplyString());
System.out.println("【FTPTools】:返回至上层目录");
System.out.println("【FTPTools】:当前目录为"
+ ftpClient.printWorkingDirectory());
// user.writeLog("【FTPTools】:当前目录为" +
// ftpClient.printWorkingDirectory());
// user.writeLog(ftpClient.getReplyString());
// user.writeLog("【FTPTools】:返回至上层目录");
} catch (IOException ioe) {
ioe.printStackTrace();
// user.writeLog(ioe);
}
}
/**
* 列出服务器上所有文件及目录
*/
public void listAllRemoteFiles() {
listRemoteFiles("*");
}
/**
* 列出服务器上文件和目录
* @param regStr --匹配的正则表达式
*/
// @SuppressWarnings("unchecked")
@SuppressWarnings(value = { "unchecked" })
public void listRemoteFiles(String regStr) {
checkConnect(ftpClient);
try {
FTPFile[] files = ftpClient.listFiles(regStr);
System.out.print(ftpClient.getReplyString());
if (files == null || files.length == 0) {
System.out.println("【FTPTools】:There has not any file!");
// user.writeLog("【FTPTools】:There has not any file!");
} else {
TreeSet<FTPFile> fileTree = new TreeSet(new Comparator() {
// 先按照文件的类型排序(倒排),然后按文件名顺序排序
public int compare(Object objFile1, Object objFile2) {
if (objFile1 == null) {
return -1;
} else if (objFile2 == null) {
return 1;
} else {
FTPFile file1 = (FTPFile) objFile1;
FTPFile file2 = (FTPFile) objFile2;
if (file1.getType() != file2.getType()) {
return file2.getType() - file1.getType();
} else {
return file1.getName().compareTo(
file2.getName());
}
}
}
});
for (FTPFile file : files) {
fileTree.add(file);
}
System.out.printf("%-35s%-10s%15s%15s/n", "名称", "类型", "修改日期",
"大小");
for (FTPFile file : fileTree) {
System.out.printf("%-35s%-10s%15s%15s/n",
iso8859togbk(file.getName()),
FILE_TYPES[file.getType()],
dateFormat.format(file.getTimestamp().getTime()),
FileUtils.byteCountToDisplaySize(file.getSize()));
}
}
} catch (Exception e) {
e.printStackTrace();
//user.writeLog(e);
}
}
/**
* 设置传输文件的类型[文本文件或者二进制文件]
* @param fileType --BINARY_FILE_TYPE、ASCII_FILE_TYPE
*/
public void setFileType(int fileType) {
try {
if (ftpClient == null) {
openConnect();
}
ftpClient.setFileType(fileType);
} catch (Exception e) {
e.printStackTrace();
// user.writeLog(e);
}
}
/**
* 转码[ISO-8859-1 -> GBK] 不同的平台需要不同的转码
* @param obj
* @return
*/
private String iso8859togbk(Object obj) {
try {
if (obj == null) {
return "要转换的对象为null";
} else {
return new String(obj.toString().getBytes("iso-8859-1"), "GBK");
}
} catch (Exception e) {
return e.toString();
}
}
/**
* 删除文件
*/
public void deleteFile(String filename) {
try {
if (ftpClient == null) {
openConnect();
}
ftpClient.deleteFile(filename);
System.out.print(ftpClient.getReplyString());
System.out.println("【FTPTools】:删除文件" + filename + "成功!");
// user.writeLog(ftpClient.getReplyString());
// user.writeLog("【FTPTools】:删除文件" + filename + "成功!");
} catch (IOException ioe) {
ioe.printStackTrace();
// user.writeLog("【FTPTools】:删除文件" + filename + "失败!");
System.out.println("【FTPTools】:删除文件" + filename + "失败!");
}
}
/**
* 重命名文件
* @param oldFileName --原文件名
* @param newFileName --新文件名
*/
public void renameFile(String oldFileName, String newFileName) {
try {
if (ftpClient == null) {
openConnect();
}
ftpClient.rename(oldFileName, newFileName);
System.out.print(ftpClient.getReplyString());
System.out.println("【FTPTools】:将文件" + oldFileName + "重命名为"
+ newFileName);
// user.writeLog(ftpClient.getReplyString());
// user.writeLog("【FTPTools】:将文件" + oldFileName + "重命名为"+
// newFileName);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
/**
* 上传文件
* @param localFilePath --本地文件路径
* @param newFileName --新的文件名
*/
public boolean uploadFile(String localFilePath, String localFileName,
String remoteFilePath, String remoteFileName) {
checkConnect(ftpClient);
if (!localFilePath.endsWith("/")) {
localFilePath += "/";
}
transferType(binaryTransfer);
int reply;
// 上传文件
BufferedInputStream bis = null;
try {
ftpClient.changeWorkingDirectory(remoteFilePath);
reply = ftpClient.getReplyCode();
if (reply == 550) {
ftpClient.makeDirectory(remoteFilePath);
ftpClient.changeWorkingDirectory(remoteFilePath);
}
bis = new BufferedInputStream(new FileInputStream(localFilePath
+ localFileName));
ftpClient.storeFile(remoteFileName, bis);
System.out.println(ftpClient.getReplyString() + "【FTPTools】:上传文件" + localFilePath
+ localFileName + "成功!");
return true;
} catch (Exception e) {
System.out.println("【FTPTools】:上传文件" + localFilePath
+ localFileName + "失败!");
System.out.println(e.toString());
return false;
} finally {
try {
if (bis != null) {
bis.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 下载文件
* @param remoteFileName --服务器上的文件名
* @param localFileName --本地文件名
*/
public boolean loadFile(String remoteFilePath, String remoteFileName,
String localFilePath, String localFileName) {
checkConnect(ftpClient);
if (!remoteFilePath.endsWith("/")) {
remoteFilePath += "/";
}
if (!localFilePath.endsWith("/")) {
localFilePath += "/";
}
transferType(binaryTransfer);
if (localFileName == "" || localFileName == null) {
localFileName = remoteFileName;
}
// 下载文件
BufferedOutputStream bos = null;
try {
if (remoteFilePath != "" && remoteFilePath != null) {
changeWorkingDirectory(remoteFilePath);
}
System.out.println("【FTPTools】:开始下载文件到" + localFilePath + localFileName);
//user.writeLog(ftpClient.getReplyString());
if (isExist(remoteFileName)) {
bos = new BufferedOutputStream(new FileOutputStream(
localFilePath + localFileName));
ftpClient.retrieveFile(remoteFileName, bos);
System.out.print(ftpClient.getReplyString());
System.out.println("【FTPTools】:下载文件" + remoteFilePath
+ remoteFileName + "成功!");
return true;
} else {
System.out.println("【FTPTools】:文件" + remoteFilePath
+ remoteFileName + "不存在!");
System.out.println("【FTPTools】:下载文件" + remoteFilePath
+ remoteFileName + "失败!");
return false;
}
} catch (Exception e) {
System.out.println(ftpClient.getReplyString() +"【FTPTools】:下载文件" + remoteFilePath
+ remoteFileName + "失败!");
System.out.println(String.valueOf(e));
return false;
} finally {
try {
if (bos != null)
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 设置文件传输类型
* @param binaryTransfer
* @throws IOException
*/
public void transferType(boolean binaryTransfer) {
try {
if (binaryTransfer) {
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
} else {
ftpClient.setFileType(FTPClient.ASCII_FILE_TYPE);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 检查远端文件是否存在
* @param remoteFileName
* @return
*/
@SuppressWarnings("unchecked")
public boolean checkFileName(String remotePath, String remoteFileName) {
checkConnect(ftpClient);
changeWorkingDirectory(remotePath);
boolean result = false;
try {
FTPFile[] files = ftpClient.listFiles("*");
System.out.print(ftpClient.getReplyString());
if (files == null || files.length == 0) {
System.out.println("【FTPTools】:There has not any file!");
//user.writeLog("【FTPTools】:There has not any file!");
} else {
TreeSet<FTPFile> fileTree = new TreeSet(new Comparator() {
// 先按照文件的类型排序(倒排),然后按文件名顺序排序
public int compare(Object objFile1, Object objFile2) {
if (objFile1 == null) {
return -1;
} else if (objFile2 == null) {
return 1;
} else {
FTPFile file1 = (FTPFile) objFile1;
FTPFile file2 = (FTPFile) objFile2;
if (file1.getType() != file2.getType()) {
return file2.getType() - file1.getType();
} else {
return file1.getName().compareTo(
file2.getName());
}
}
}
});
for (FTPFile file : files) {
fileTree.add(file);
}
for (FTPFile file : fileTree) {
if (file.getName().equals(remoteFileName)) {
result = true;
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
changeToParentDirectory();
return result;
}
/**
* 检测文件或文件夹是否存在
* @param fileName --文件或文件夹名称
* @return
*/
public boolean isExist(String fileName) {
checkConnect(ftpClient);
boolean tmp = false;
try {
System.out.println("【FTPTools】:当前目录为"
+ ftpClient.printWorkingDirectory());
// user.writeLog("【FTPTools】:当前目录为" +
// ftpClient.printWorkingDirectory());
String[] strs = ftpClient.listNames();
for (int i = 0; i < strs.length; i++) {
if (strs[i].equals(fileName)) {
tmp = true;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return tmp;
}
public void checkConnect(){
checkConnect(this.ftpClient);
}
private void checkConnect(FTPClient ftpClient) {
if (ftpClient == null) {
openConnect();
} else {
try {
ftpClient.stat();
} catch (IOException e) {
try {
ftpClient.setDefaultPort(port);
ftpClient.configure(getFtpConfig());
ftpClient.connect(hostname);
ftpClient.login(uid, pwd);
ftpClient.setControlEncoding("GB18030");
System.out.print(ftpClient.getReplyString());
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
// user.writeLog("【FTPTools】:FTP server refused connection.");
System.out.println("【FTPTools】:FTP server refused connection.");
} else {
if (ftpClient.login(uid, pwd)) {
// 设置为passive模式
ftpClient.enterLocalPassiveMode();
}
// user.writeLog("【FTPTools】:登录ftp服务器[" + hostname+ "]成功");
System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]成功");
System.out.println("【FTPTools】:当前目录为"
+ ftpClient.printWorkingDirectory());
// user.writeLog("【FTPTools】:当前目录为" +
// ftpClient.printWorkingDirectory());
}
} catch (Exception e2) {
// user.writeLog("【FTPTools】:登录ftp服务器[" + hostname + "]失败");
System.out.println("【FTPTools】:登录ftp服务器[" + hostname + "]失败");
e2.printStackTrace();
}
}
}
}
/**
* 测试
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FTPTools ftp = new FTPTools( "aaaa", "bbbb",
"127.0.0.1");
ftp.loadFile("/test" , "temp.txt", "C:/" , "");
ftp.closeConnect();
}
}
相关推荐
java_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user_guide.zipjava_util_concurrent_user...
java_sql_Date与java_util_Date转换
《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...
### Java_util 工具包详解 #### 一、引言 `java.util`包作为Java标准库中的一个重要组成部分,提供了大量的实用工具类和接口,旨在简化开发者在处理数据结构、日期时间、事件处理等方面的工作。这个包包含了如日期...
"word2vec_java_util" 指的是一个基于Java实现的Word2Vec工具包,专门用于处理文本数据并生成词向量。这个工具包可以帮助开发者在Java环境中利用Word2Vec算法对大规模文本数据进行预处理,从而提取出每个单词的向量...
`java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....
《PyPI官网下载 | flask_util_js-0.2.10.tar.gz——深入解析Python Flask实用工具库》 在Python的Web开发领域,Flask框架以其轻量级、灵活和可扩展性而广受欢迎。PyPI(Python Package Index)作为Python软件包的...
JUC使用指导手册 http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html 中文译文
Java FTP程序是一个基于Java语言开发的应用,用于实现文件传输协议(FTP)的功能。这个程序能够进行FTP传输,即上传和下载文件,同时也包含了用户管理功能,允许用户进行登录和权限控制。尽管它的用户界面可能不够...
cloudmusic_util
在python下的ply文件的读取存储工作,代码中存有对.ply文件的读取、存储函数。
yintong_api_util-1.0.0.jar 工具类
实现一个配置简单功能强大的excel工具类搞定大多数导入导出. ...对于J2EE项目导入导出Excel是最普通和实用功能, 本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是...
在IT行业中,`util`通常指的是“utility”的缩写,代表工具或实用程序。`zip_util`则可能是一个专门处理ZIP文件的模块或库。ZIP是一种常见的文件压缩格式,广泛用于数据存储和传输。`util.zip_util`可能是为了简化...
java_util_concurrent_user_guide_cn.pdf 内容预览: 1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 ...
《Linux源码中的缩进块匹配与日志分析——load_log_util详解》 在Linux操作系统中,源代码的编写遵循一定的规范,其中就包括了代码的缩进规则。这种规范不仅提高了代码的可读性,也有助于理解程序的逻辑结构。`load...
在本案例中,`x509_util`库利用了NDK来解析X509证书的字节流,这是对Java层API的一个补充,因为Android的Java API虽然提供了处理X509证书的功能,但在处理大量证书或高性能需求时,可能会显得效率不足。 解析X509...
微信发送消息的Java版本代码,可供学习与参考,包含发送消息代码和一些工具包
这个"nat.rar_VXWORKS nat_nat_nat vxworks_nat_util.c_vxworks"的压缩包似乎包含了与VxWorks系统中的网络地址转换(NAT)相关的源代码。下面我们将深入探讨VxWorks中的NAT机制及其相关组件。 网络地址转换(NAT)...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一个中文翻译的 java_util_concurrent...