/**
* ftp上传,下载
*/
public class FtpUtil {
/**
* 上传到文件服务器的账号
*/
public static final String ACCOUNT = "";
/**
* 上传到文件服务器的密码
*/
public static final String PASSWORD = "";
/**
* 上传到文件服务器的的root
* 不能加/那样就不是在当前目录下找啦
*/
public static final String PATH_ROOT = "/ /**
* 上传到文件服务器的ip地址
*/
public static final String IP = "";
/**
* 判断需不需要上传到文件服务器
*/
public static final boolean isUploadOrDown = false;
private String ip = "";
private String username = "";
private String password = "";
private int port = -1;
private String path = "";
FtpClient ftpClient = null;
OutputStream os = null;
FileInputStream is = null;
public FtpUtil(String serverIP, String username, String password) {
this.ip = serverIP;
this.username = username;
this.password = password;
}
public FtpUtil(String serverIP, int port, String username, String password) {
this.ip = serverIP;
this.username = username;
this.password = password;
this.port = port;
}
/**
* 连接ftp服务器
*
*/
public boolean connectServer() {
ftpClient = new FtpClient();
try {
if (this.port != -1) {
ftpClient.openServer(this.ip, this.port);
} else {
ftpClient.openServer(this.ip);
}
ftpClient.login(this.username, this.password);
if (this.path.length() != 0) {
ftpClient.cd(this.path);// path是ftp服务下主目录的子目录
}
ftpClient.binary();// 用2进制上传、下载
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 断开与ftp服务器连接
*
*/
public boolean closeServer() {
try {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (ftpClient != null) {
ftpClient.closeServer();
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 检查文件夹在当前目录下是否存在
*/
public boolean isDirExist(String dir) {
String pwd = "";
try {
pwd = ftpClient.pwd();
ftpClient.cd(dir);
ftpClient.cd(pwd);
} catch (Exception e) {
return false;
}
return true;
}
/**
* * 删除FTP上的文件 *
*
* @param ftpDirAndFileName
*/
public boolean deleteFile(String ftpDirAndFileName) {
try{
ftpClient.sendServer("DELE " + ftpDirAndFileName + "\r\n");
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
/**
* * 删除FTP目录 *
*/
public boolean deleteDirectory(String ftpDirectory) {
try{
ftpClient.sendServer("XRMD " + ftpDirectory + "\r\n");
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
/**
* 在当前目录下创建文件夹
*/
public boolean createDir(String dir) {
try {
ftpClient.ascii();
StringTokenizer s = new StringTokenizer(dir, "/"); // sign
s.countTokens();
String pathName = ftpClient.pwd();
while (s.hasMoreElements()) {
pathName = pathName + "/" + (String) s.nextElement();
try {
ftpClient.sendServer("MKD " + pathName + "\r\n");
} catch (Exception e) {
e = null;
//return false;
}
ftpClient.readServerResponse();
}
ftpClient.binary();
return true;
} catch (IOException e1) {
e1.printStackTrace();
return false;
}
}
/**
* ftp上传 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
*/
public boolean upload(String filename) {
String newname = "";
if (filename.indexOf("/") > -1) {
newname = filename.substring(filename.lastIndexOf("/") + 1);
} else {
newname = filename;
}
return upload(filename, newname);
}
/**
* ftp上传 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
*
* @param fileName
* 要上传的文件(或文件夹)名
* @param newName
* 服务器段要生成的文件(或文件夹)名
* @return
*/
public boolean upload(String fileName, String newName) {
try {
String savefilename = new String(fileName.getBytes("ISO-8859-1"),"utf-8");
File file_in = new File(fileName);// 打开本地待上传的文件
if (!file_in.exists()) {
throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
}
if (file_in.isDirectory()) {
upload(file_in.getPath(), newName, ftpClient.pwd());
} else {
uploadFile(file_in.getPath(), newName);
}
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
return true;
} catch (Exception e) {
e.printStackTrace();
System.err.println("Exception e in Ftp upload(): " + e.toString());
return false;
} finally {
try {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 真正用于上传的方法
*/
private void upload(String fileName, String newName, String path)
throws Exception {
String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");
File file_in = new File(fileName);// 打开本地待长传的文件
if (!file_in.exists()) {
throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
}
if (file_in.isDirectory()) {
if (!isDirExist(newName)) {
createDir(newName);
}
ftpClient.cd(newName);
File sourceFile[] = file_in.listFiles();
for (int i = 0; i < sourceFile.length; i++) {
if (!sourceFile[i].exists()) {
continue;
}
if (sourceFile[i].isDirectory()) {
this.upload(sourceFile[i].getPath(), sourceFile[i]
.getName(), path + "/" + newName);
} else {
this.uploadFile(sourceFile[i].getPath(), sourceFile[i]
.getName());
}
}
} else {
uploadFile(file_in.getPath(), newName);
}
ftpClient.cd(path);
}
/**
* upload 上传文件
*
* @param filename
* 要上传的文件名
* @param newname
* 上传后的新文件名
* @return -1 文件不存在 >=0 成功上传,返回文件的大小
* @throws Exception
*/
public long uploadFile(String filename, String newname) throws Exception {
long result = 0;
TelnetOutputStream os = null;
FileInputStream is = null;
try {
java.io.File file_in = new java.io.File(filename);
if (!file_in.exists())
return -1;
os = ftpClient.put(newname);
result = file_in.length();
is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
return result;
}
/**
* 通过流直接上传文件
*/
public boolean upload(InputStream fins, String newname) throws Exception {
TelnetOutputStream os = null;
try {
os = ftpClient.put(newname);
System.out.println(newname);
if(fins == null){
return false;
}
byte[] bytes = new byte[1024];
int c;
while ((c = fins.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
return true;
} catch (Exception e){
e.printStackTrace();
return false;
}finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
}
/**
*通过流 从ftp下载文件到本地
*
* @param filename
* 服务器上的文件名
*
* @return 输出流
* @throws Exception
*/
public InputStream download( String filename) {
TelnetInputStream is = null;
try {
is = ftpClient.get(filename);
return is;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
}
}
/**
* 从ftp下载文件到本地
*
* @param filename
* 服务器上的文件名
* @param newfilename
* 本地生成的文件名
* @return
* @throws Exception
*/
public long downloadFile(String filename, String newfilename) {
long result = 0;
TelnetInputStream is = null;
FileOutputStream os = null;
try {
is = ftpClient.get(filename);
java.io.File outfile = new java.io.File(newfilename);
os = new FileOutputStream(outfile);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
result = result + c;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* 取得相对于当前连接目录的某个目录下所有文件列表
*
* @param path
* @return
*/
public List getFileList(String path) {
List list = new ArrayList();
DataInputStream dis;
try {
dis = new DataInputStream(ftpClient.nameList(this.path + path));
String filename = "";
while ((filename = dis.readLine()) != null) {
list.add(filename);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
/**
* 上传到文件服务器的方法
*/
public static boolean upLoadFileServer(String loadFileName,String ServFileName,String branchPath){
FtpUtil ftp = new FtpUtil(FtpUtil.IP, FtpUtil.ACCOUNT, FtpUtil.PASSWORD);
ftp.connectServer();
//目前创建一个文件夹
if(!("".equals(branchPath) || branchPath == null) && !ftp.isDirExist("vgop_attachment"+"/"+branchPath)){
ftp.getFileList("/weblogic/test");
// for (int i = 0; i < list.size(); i++) {
// String name = list.get(i).toString();
// System.out.println(name);
// }
ftp.closeServer();
return true;
}
public static void main(String[] args) {
}
}