|
//附件是需要的jar包
package com.cbf.util.ftp;
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.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
/**
* org.apache.commons.net.ftp.FTPClient;
* @return FTPClient
* @author ryan
* @since Oct 14, 2009
*
*/
public class FtpOperation {
private String ftpIP = "10.1.0.9";
private String loginName = "jishu";
private String password = "123456";
// String remoteDir = "/cc";
private String ftpPort = "21";
private FTPClient ftp = new FTPClient();
private Map<String, String> map = new HashMap<String, String>();
/**
*
* @param ftpIP FTP服务器ip
* @param ftpPort FTP服务器端口
* @param loginName FTP服务器登录名
* @param password FTP服务器登录密码
*/
public FtpOperation(String ftpIP, String ftpPort, String loginName,
String password) {
this.ftpIP = ftpIP;
this.ftpPort = ftpPort;
this.loginName = loginName;
this.password = password;
getFtpConnection();
}
/**
*
* @return FTPClient
*/
public FTPClient getFtpConnection() {
try {
// connection
ftp.connect(ftpIP, Integer.parseInt(ftpPort));
int reply = ftp.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
// login
if (ftp.login(loginName, password)) {
ftp.setControlEncoding("GBK");
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
return ftp;
} else {
map.put("msg", "用户名或密码错误");
ftp.logout();
}
} else {
map.put("msg", "ip或端口错误");
ftp.disconnect();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException f) {
// TODO Auto-generated catch block
f.printStackTrace();
}
}
}
return null;
}
public void closeFtpConnection() {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException f) {
}
}
}
/**
*
* @param localFilePath
* 本地文件的绝对路径
* @param serverFilePath
* 上传到ftp上的相对路径相 相对于ftp默认路径 如:"/aa/bb/cc/11.xml"
* @return String
*/
public boolean uploadFile(String localFilePath, String serverFilePath) {
InputStream input = null;
try {
input = new FileInputStream(localFilePath);
if (input == null) {
map.put("msg", "本地文件不存在");
}
int n = serverFilePath.lastIndexOf("/") + 1;
String[] str = serverFilePath.substring(0, n).split("/");// 取文件夹路径
ftp.setControlEncoding("GBK");
for (int i = 1; i < str.length; i++) {
FTPFile[] files = ftp.listFiles();// 取ftp当前目录下的文件
boolean inMark = true;
for (int j = 1; j < files.length; j++) {
if (files[j].getName().equals(str)) {// 判断是否有该文件夹,如果有返回false;
System.out.println(files[j].getName() + "==" + str);
inMark = false;
}
}
if (inMark) {
System.out.println("建包" + str);
ftp.makeDirectory(new String(str.getBytes("GBK"),
"iso-8859-1"));
}
System.out.println("进入" + str);
boolean b = ftp.changeWorkingDirectory(new String(str
.getBytes("GBK"), "iso-8859-1"));
}
return ftp.storeFile(serverFilePath.substring(n, serverFilePath
.length()), input);// 上传文件
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
map.put("msg", "本地文件不存在");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
map.put("msg", "异常");
} finally {
try {
input.close();
ftp.logout();
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException f) {
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
/**
* downloadType
*
* @param downloadType
* 为0是下载单个文件;downloadType1时为下载文件夹下的文件
* @param localFilePath
* 下载到本地的绝对路径
* @param serverFilePath
* ftp服务器上的相对路径相;相对于ftp默认路径 如:"aa/aa/bb"
* @return
*/
public boolean downloadFile(int downloadType, String localFilePath,
String serverFilePath) {
boolean reMark = true;
OutputStream outStream = null;
try {
String localFileEncoding = new String(
localFilePath.getBytes("GBK"), "iso-8859-1");
String serverPathEncoding = new String(serverFilePath
.getBytes("GBK"), "iso-8859-1");
if (downloadType == 0) {// 下载单个文件
FTPFile[] files = ftp.listFiles(serverPathEncoding);
if (files.length != 1) {
map.put("msg", "没有" + serverPathEncoding + "这个文件");
return false;
}
outStream = new FileOutputStream(localFileEncoding
+ files[0].getName());
reMark = ftp.retrieveFile(serverPathEncoding, outStream);
} else if (downloadType == 1) {// 下载文件夹下的所有文件,不包含文件夹
String[] s = serverFilePath.split("/");
for (int i = 1; i < s.length; i++) {
ftp.changeWorkingDirectory(s);
}
String[] files2 = ftp.listNames(serverPathEncoding);
if (files2 == null) {
map.put("msg", serverPathEncoding + "没有这个路径下没有文件");
return false;
}
for (int i = 0; i < files2.length; i++) {
File f = new File(localFilePath + "/" + files2);
outStream = new FileOutputStream(f);
String name = new String(files2.getBytes("GBK"),
"iso-8859-1");
// 任意文件下载失败则返回失败
if (!ftp.retrieveFile(serverPathEncoding + "/" + name,
outStream)) {
map.put("msg" + i, name + "---下载失败!");
reMark = false;
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
map.put("msg", "异常");
reMark = false;
} finally {
try {
outStream.close();
ftp.logout();
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException f) {
reMark = false;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
reMark = false;
}
}
return reMark;
}
/**
* 取某路径下的文件,不包含子文件夹里的文件
* @param path
* ftp服务器上的相对路径相;相对于ftp默认路径 如:"aa/aa/bb"
*/
public ArrayList<String> getFileList(String path) {
ArrayList<String> list = new ArrayList<String>();
try {
String serverPathEncoding = new String(path.getBytes("GBK"),
"iso-8859-1");
//String[] files = ftp.listNames(serverPathEncoding);//文件个数
FTPFile[] files = ftp.listFiles(serverPathEncoding);//所有东西
if (files == null) {
map.put("msg", path+"这个路径下是空的");
} else {
for (FTPFile ss : files) {
//System.out.println(ss.getName());
list.add(ss.getName());
}
}
} catch (Exception e) {
map.put("msg", "异常");
}
return list;
}
public static void main(String args[]) throws Exception {
FtpOperation ftpup = new FtpOperation("10.1.0.9", "21", "jishu",
"123456");
// ftpup.UploadFile("f:/aa.xml", "/的是/dd/56.xml");
// ftpup.getFtpConnection();
// boolean b = ftpup.uploadFile("h:/eeasas说不定.txt",
// "sd/sdsd33.pdf/11.txt");
// boolean b = ftpup.downloadFile(0, "h:/", "的是/eeasas说不定.txt");
// System.out.println(b);
//ftpup.getFileList("的是/dd/");
}
} |
|
|