首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 实现ftp下传与上载文件夹

2012-10-06 
java 实现ftp上传与下载文件夹来自:http://blog.sina.com.cn/s/blog_4fd11d0a0100xe1t.htmlpackage com.bo

java 实现ftp上传与下载文件夹

来自: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 楼 ydsakyclguozi 2012-08-01   哥们,自己试试再往上贴,谢谢

热点排行