package cn.kvsoft.ftp;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ProtocolCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.io.CopyStreamListener;
public class FTPTransfer {
private Log log = LogFactory.getLog(this.getClass());
private FTPClient ftp;
private ProtocolCommandListener listener;
/**
* 可上传的文件格式
*/
private String[] fileExtension;
public FTPTransfer() {
ftp = new FTPClient();
}
/**
* @param openCommandListener
* 是否打开命令执行监听器
*/
public FTPTransfer(boolean openCommandListener) {
ftp = new FTPClient();
if (openCommandListener) {
openCommandListerner();
}
}
/**
* 打开命令执行监听器
*/
public void openCommandListerner() {
listener = new PrintCommandListener(new PrintWriter(System.out), true);
ftp.addProtocolCommandListener(listener);
log.debug("打开命令执行监听器!");
}
/**
* 关闭命令执行监听器
*/
public void closeCommandListener() {
if (listener != null) {
ftp.removeProtocolCommandListener(listener);
log.debug("关闭命令执行监听器!");
}
}
public void addCopyStreamAdaptor(FTPCopyStreamAdaptor adaptor) {
ftp.setCopyStreamListener(adaptor);
}
public void removeCopyStreamAdaptor() {
ftp.setCopyStreamListener(null);
}
public FTPCopyStreamAdaptor getCopyStreamAdaptor() {
if (getCopyStreamlistener() instanceof FTPCopyStreamAdaptor) {
return (FTPCopyStreamAdaptor) getCopyStreamlistener();
} else {
return null;
}
}
public void addCopyStreamListener(CopyStreamListener listener) {
ftp.setCopyStreamListener(listener);
}
public CopyStreamListener getCopyStreamlistener() {
return ftp.getCopyStreamListener();
}
/**
* 和FTP服务器建立连接
*
* @param hostname
* 访问主机名
* @param port
* 访问端口
* @throws FTPTransferException
*/
public boolean connect(String hostname, int port)
throws FTPTransferException {
boolean state = false;
try {
ftp.connect(hostname, port);
if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
state = true;
log.debug("打开FTP连接!");
} else {
log.error("打开FTP连接失败!");
}
} catch (Exception e) {
throw new FTPTransferException(FTPConst.ERROR_CONNECTSERVER);
}
return state;
}
/**
* 和FTP服务器建立连接并进行登录
*
* @param hostname
* 访问主机名
* @param port
* 访问端口
* @param username
* 登录用户名
* @param password
* 登录密码
* @return true-成功 false-失败
* @throws FTPTransferException
*/
public boolean connectAndLogin(String hostname, int port, String username,
String password) throws FTPTransferException {
boolean state = false;
if (connect(hostname, port)) {
state = login(username, password);
}
return state;
}
/**
* 登录服务器
*
* @param userName
* 用户名
* @param password
* 密码
* @return
* @throws FTPTransferException
*/
public boolean login(String username, String password)
throws FTPTransferException {
boolean state = false;
try {
if (ftp.login(username, password)) {
state = true;
log.debug("登录成功!");
ftp.setKeepAlive(true);
} else {
log.debug("登录失败!");
}
} catch (IOException e) {
e.printStackTrace();
throw new FTPTransferException(FTPConst.ERROR_LOGINSERVER);
}
return state;
}
/**
* 退出FTP登录
*
* @return
* @throws FTPTransferException
*/
public boolean logout() throws FTPTransferException {
boolean state = false;
try {
state = ftp.logout();
if (state) {
log.debug("退出登录!");
}
} catch (IOException e) {
e.printStackTrace();
throw new FTPTransferException(FTPConst.ERROR_LOGOUTSERVER);
}
return state;
}
/**
* 退出FTP登录,并断开连接
*
* @return
* @throws FTPTransferException
*/
public boolean logoutAndDisconnect() throws FTPTransferException {
return logout() & disconnect();
}
/**
* 断开连接
*
* @return
* @throws IOException
*/
public boolean disconnect() throws FTPTransferException {
boolean state = false;
try {
closeCommandListener();
if (ftp.isConnected()) {
ftp.disconnect();
state = true;
log.debug("关闭FTP连接!");
}
} catch (IOException e) {
e.printStackTrace();
state = false;
throw new FTPTransferException(FTPConst.ERROR_DISCONNECTSERVER);
}
return state;
}
/**
* 上传文件
* @param local 本地文件路径
* @return
* @throws FTPTransferException
*/
public int uploadFile(String local) throws FTPTransferException {
return uploadFile(local, null);
}
/**
* 上传文件
*
* @param local
* 本地文件路径
* @param remote
* 服务端文件保存名称
* @return
* @throws FTPTransferException
*/
public int uploadFile(String local, String remote)
throws FTPTransferException {
log.debug("上传文件。。。。。。。。。。。。。。。。。。。。。。。。。。");
log.debug("服务端文件保存路径:" + remote);
int state = 0;
try {
ftp.enterLocalPassiveMode(); // 设置PassiveMode传输
ftp.setFileType(FTP.BINARY_FILE_TYPE); // 设置以二进制流的方式传输
String fileName = remote;
if (remote != null && remote.contains("/")) { // 如果包含文件路径分隔符,则创建对应的目录结构
fileName = remote.substring(remote.lastIndexOf("/") + 1);
log.debug("服务端当前目录:" + ftp.printWorkingDirectory());
if (fileName.contains(".")) {
mkdirs(remote.substring(0, remote.lastIndexOf("/")));
} else {
fileName = "";
mkdirs(remote);
}
}
state = upload(local, fileName);
} catch (IOException e) {
e.printStackTrace();
}
log.debug("上传文件结束。。。。。。。。。。。。。。。。。。。。。。。。。。");
return state;
}
/**
* 上传多个文件
* @param fileInfos {{localPath, remotePath}, ...}
*/
public void uploadFiles(String[][] fileInfos) throws FTPTransferException {
for (String[] info : fileInfos) {
uploadFile(info[0], info[1]);
}
}
/**
* 对远程文件目录进行创建
*
* @param remote
*/
private void mkdirs(String remote) throws FTPTransferException {
if (remote == null || remote.trim().length() == 0) {
return;
}
try {
String dir = remote; // 要创建的目录名称
String subDir = "";
if (remote.contains("/")) {
int index = remote.indexOf("/");
dir = remote.substring(0, index);
subDir = remote.substring(index + 1);
}
dir = gbk2iso(dir);
if (dir.length() > 0) {
if (!ftp.changeWorkingDirectory(dir)) { // 切换到指定目录,如果无此目录则创建。
if (ftp.makeDirectory(dir)) {
log.debug("创建目录:" + ftp.printWorkingDirectory() + dir);
if (ftp.changeWorkingDirectory(dir)) { // 切换至创建的目录
log.debug("切换工作目录至:" + ftp.printWorkingDi
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ftpapplet.rar (43个子文件)
ftpapplet
bin
java.policy.applet 141B
test
Test.class 2KB
TestFTP.class 2KB
log4j.properties 514B
cn
kvsoft
ftp
FTPConst.class 2KB
FTPFileUploadThread.class 4KB
FTPCopyStreamAdaptor.class 2KB
FTPTransferException.class 2KB
FTPTransfer.class 12KB
FTPTransfer$1.class 1KB
applet
FileSizeRenderer.class 2KB
UIManager$1.class 1KB
MyApplet.class 2KB
Application$1.class 555B
MyApplet$1.class 618B
FileInfoDropTargetTable.class 6KB
AppletParam.class 4KB
FileInfoTableModel.class 7KB
Application.class 1KB
UIManager.class 8KB
applet.html 978B
.settings
org.eclipse.core.resources.prefs 114B
org.eclipse.jdt.core.prefs 629B
src
test
TestFTP.java 1KB
Test.java 1KB
log4j.properties 514B
cn
kvsoft
ftp
FTPCopyStreamAdaptor.java 1KB
FTPTransferException.java 1KB
FTPTransfer.java 14KB
FTPFileUploadThread.java 2KB
FTPConst.java 2KB
applet
MyApplet.java 1KB
AppletParam.java 5KB
FileSizeRenderer.java 1KB
Application.java 1KB
FileInfoDropTargetTable.java 4KB
FileInfoTableModel.java 7KB
UIManager.java 8KB
applet.html 978B
.project 385B
.classpath 433B
lib
commons-logging-1.1.1.jar 59KB
commons-net-3.0.1.jar 263KB
共 43 条
- 1
莫道今生
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页