来自:http://blog.sina.com.cn/s/blog_4fd11d0a0100xe1t.html
package com.bonc.sap.common;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.StringTokenizer;
import sun.net.TelnetInputStream;
import sun.net.ftp.FtpClient;
public class FtpTool {
private String ip = "XX.XX.XXX.XXX";// ftp服务器的IP地址
private String username = "XXX";// 用户名
private String password = "XXX";// 密码
private int port = 21;// 默认端口
private String localfilefullname = "";// 需要上传的目录,带绝对路径
FtpClient ftpclient = null;
OutputStream os = null;
FileInputStream is = null;
private void createdir(String dir, FtpClient ftpclient) throws Exception {
ftpclient.ascii();
StringTokenizer s = new StringTokenizer(dir, "/"); //
s.countTokens();
String pathname = "";
while (s.hasMoreElements()) {
pathname = pathname + "/" + (String) s.nextElement();
try {
ftpclient.sendServer("mkd " + pathname + "\r\n");// 如果服务器上有该目录,不会被创建
} catch (Exception e) {
e = null;
}
ftpclient.readServerResponse();
}
ftpclient.binary();
}
private boolean isdirexist(String dir, FtpClient ftpclient)
throws Exception {
try {
ftpclient.cd(dir);
} catch (Exception e) {
// todo 自动生成 catch 块
return false;
}
return true;
}
public boolean upload(String prefix, String localfilefullname)
throws Exception {
this.localfilefullname = localfilefullname;
try {
String savefilename = localfilefullname;
// 新建一个ftp客户端连
ftpclient = new FtpClient();
ftpclient.openServer(this.ip, this.port);
ftpclient.login(this.username, this.password);
// 打开本地待长传的文件
File file_in = new File(savefilename);
processfile(prefix, file_in, ftpclient);
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (ftpclient != null) {
ftpclient.closeServer();
}
return true;
} catch (Exception e) {
e.printStackTrace();
System.err.println("exception e in ftp upload(): " + e.toString());
return false;
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (ftpclient != null) {
ftpclient.closeServer();
}
}
}
private void processfile(String prefix, File source, FtpClient ftpclient)
throws Exception {
if (source.exists()) {
if (source.isDirectory()) {
String path = prefix
+ source.getPath()
.substring(localfilefullname.length()).replace(
"\\", "/");
if (!isdirexist(path, ftpclient)) {
createdir(path, ftpclient);
}
File sourcefile[] = source.listFiles();
for (int i = 0; i < sourcefile.length; i++) {
if (sourcefile.exists()) {
if (sourcefile.isDirectory()) {
this.processfile(prefix, sourcefile, ftpclient);
} else {
ftpclient.cd(cheangpath(prefix, sourcefile
.getPath()));
ftpclient.binary();
os = ftpclient.put(sourcefile.getName());
byte[] bytes = new byte[1024];
is = new FileInputStream(sourcefile);
// 开始复制
int c;
// 暂未考虑中途终止的情况
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
}
}
}
} else {
ftpclient.cd(cheangpath(prefix, source.getPath()));
ftpclient.binary();
os = ftpclient.put(source.getName());
byte[] bytes = new byte[1024];
is = new FileInputStream(source);
// 开始复制
int c;
// 暂未考虑中途终止的情况
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
}
} else {
throw new Exception("此文件或文件夹[" + source.getName() + "]有误或不存在!");
}
}
private String cheangpath(String prefix, String path) throws Exception {
path = path.substring(localfilefullname.length()).replace("\\", "/");
if ("".equals(path)) {
path = "/";
} else {
path = path.substring(0, path.lastIndexOf("/") + 1);
}
path = prefix + path;
return path;
}
public Long getSize(String strName) {
Long TotalSize = 0L;
File f = new File(strName);
if (f.isFile())
return f.length();
else {
if (f.isDirectory()) {
File[] contents = f.listFiles();
for (int i = 0; i < contents.length; i++) {
if (contents.isFile())
TotalSize += contents.length();
else {
if (contents.isDirectory())
TotalSize += getSize(contents.getPath());
}
}
}
}
return TotalSize;
}
public void processdownload(String localPath, String remotePath) {
FileOutputStream outStream = null;
ArrayList list = null;
try {
list = getFileList(remotePath);
ftpclient.binary();
File temp = null;
for (int i = 0; i < list.size(); i++) {
// 如果是文件,则直接执行下载
if (isFile(list.get(i).toString())) {
ftpclient.cd(remotePath);
ArrayList listfileName = getNameList(remotePath);
for (int j = 0; j < listfileName.size(); j++) {
temp = new File(localPath + File.separator
+ listfileName.get(j).toString());
outStream = new FileOutputStream(temp);
TelnetInputStream is = ftpclient.get(listfileName
.get(j).toString());
byte[] bytes = new byte[1024];
int c;
// 暂未考虑中途终止的情况
while ((c = is.read(bytes)) != -1) {
outStream.write(bytes, 0, c);
}
is.close();
outStream.close();
System.out.println("成功下载文件:" + remotePath
+ File.separator
+ listfileName.get(j).toString());
}
} else if (isDir(list.get(i).toString()))// 是目录
{
temp = new File(localPath + File.separator
+ getFileName(list.get(i).toString()));
temp.mkdirs();
String newRemote = remotePath + File.separator
+ getFileName(list.get(i).toString());
processdownload(localPath + File.separator
+ getFileName(list.get(i).toString()), newRemote);
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
outStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public String getFileName(String line) {
String filename = (String) parseLine(line).get(8);
return filename;
}
public ArrayList getNameList(String remotePath) throws IOException {
BufferedReader dr = new BufferedReader(new InputStreamReader(ftpclient
.nameList(remotePath)));
ArrayList al = new ArrayList();
String s = "";
while ((s = dr.readLine()) != null) {
System.out.println("filename:" + s);
al.add(s);
}
return al;
}
public ArrayList getFileList(String remotePath) throws IOException {
ftpclient.cd(remotePath);
BufferedReader dr = new BufferedReader(new InputStreamReader(ftpclient
.list()));
ArrayList al = new ArrayList();
String s = "";
while ((s = dr.readLine()) != null) {
System.out.println("readLine:" + s);
if ((!((String) parseLine(s).get(8)).equals("."))
&& (!((String) parseLine(s).get(8)).equals(".."))) {
al.add(s);
System.out.println("s:" + s);
}
}
return al;
}
public boolean isDir(String line) {
return ((String) parseLine(line).get(0)).indexOf("d") != -1;
}
public boolean isFile(String line) {
return !isDir(line);
}
private ArrayList parseLine(String line) {
ArrayList s1 = new ArrayList();
StringTokenizer st = new StringTokenizer(line, " ");
while (st.hasMoreTokens()) {
s1.add(st.nextToken());
}
return s1;
}
public boolean download(String localPath, String remotePath)
throws Exception {
this.localfilefullname = localfilefullname;
try {
String savefilename = localfilefullname;
// 新建一个ftp客户端连
ftpclient = new FtpClient();
ftpclient.openServer(this.ip, this.port);
ftpclient.login(this.username, this.password);
ftpclient.cd(remotePath);
processdownload(localPath, remotePath);
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (ftpclient != null) {
ftpclient.closeServer();
}
return true;
} catch (Exception e) {
e.printStackTrace();
System.err.println("exception e in ftp upload(): " + e.toString());
return false;
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
if (ftpclient != null) {
ftpclient.closeServer();
}
}
}
public static void main(String args[]) throws Exception {
FtpTool ftpup = new FtpTool();
String path = "E:/test2/test";
if (ftpup.getSize(path) > 204800) {
System.out.println("您上传的文件过大,文件大小不能大于200k!");
return;
}
// ftpup.upload("/02", path);
ftpup.download("c:\\test", "/52601/20090612/bonc20090612095616");
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com