import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.catalina.tribes.util.Logs;import sun.net.TelnetInputStream;import sun.net.TelnetOutputStream;import sun.net.ftp.FtpClient;public class DownFileForFtp { FtpClient ftpClient; private String server = "ip"; private int port = 21; private String userName = "usn"; private String userPassword = "pwd"; /** * 链接到服务器 * * @return */ public boolean open() { if (ftpClient != null && ftpClient.serverIsOpen()) return true; try { ftpClient = new FtpClient(); ftpClient.openServer(server, port); ftpClient.login(userName, userPassword); ftpClient.binary(); return true; } catch (Exception e) { e.printStackTrace(); ftpClient = null; return false; } } public boolean cd(String dir) { boolean f = false; try { ftpClient.cd(dir); } catch (IOException e) { //Logs.error(e.toString()); return f; } return true; } /** * 上传文件到FTP服务器 * * @param localPathAndFileName * 本地文件目录和文件名 * @param ftpFileName * 上传后的文件名 * @param ftpDirectory * FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录 * @throws Exception */ public boolean upload(String localDirectoryAndFileName, String ftpFileName, String ftpDirectory) throws Exception { if (!open()) return false; FileInputStream is = null; TelnetOutputStream os = null; try { char ch = ' '; if (ftpDirectory.length() > 0) ch = ftpDirectory.charAt(ftpDirectory.length() - 1); for (; ch == '/' || ch == '\\'; ch = ftpDirectory .charAt(ftpDirectory.length() - 1)) ftpDirectory = ftpDirectory.substring(0, ftpDirectory.length() - 1); int slashIndex = ftpDirectory.indexOf(47); int backslashIndex = ftpDirectory.indexOf(92); int index = slashIndex; String dirall = ftpDirectory; if (backslashIndex != -1 && (index == -1 || index > backslashIndex)) index = backslashIndex; String directory = ""; while (index != -1) { if (index > 0) { String dir = dirall.substring(0, index); directory = directory + "/" + dir; ftpClient.sendServer("XMKD " + directory + "\r\n"); ftpClient.readServerResponse(); } dirall = dirall.substring(index + 1); slashIndex = dirall.indexOf(47); backslashIndex = dirall.indexOf(92); index = slashIndex; if (backslashIndex != -1 && (index == -1 || index > backslashIndex)) index = backslashIndex; } ftpClient.sendServer("XMKD " + ftpDirectory + "\r\n"); ftpClient.readServerResponse(); os = ftpClient.put(ftpDirectory + "/" + ftpFileName); File file_in = new File(localDirectoryAndFileName); is = new FileInputStream(file_in); byte bytes[] = new byte[1024]; int i; while ((i = is.read(bytes)) != -1) os.write(bytes, 0, i); // 清理垃圾 return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { if (is != null) is.close(); if (os != null) os.close(); } } /** * 从FTP服务器上下载文件并返回下载文件长度 * * @param ftpDirectoryAndFileName * @param localDirectoryAndFileName * @return * @throws Exception */ public long download(String ftpDirectoryAndFileName, String localDirectoryAndFileName) throws Exception { long result = 0; if (!open()) return result; TelnetInputStream is = null; FileOutputStream os = null; try { is = ftpClient.get(ftpDirectoryAndFileName); java.io.File outfile = new java.io.File(localDirectoryAndFileName); 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 (Exception e) { throw e; } finally { if (is != null) is.close(); if (os != null) os.close(); } return result; } /** * 返回FTP目录下的文件列表 * * @param ftpDirectory * @return */ public ListgetFileNameList(String ftpDirectory) { List list = new ArrayList (); if (!open()) return list; try { DataInputStream dis = new DataInputStream( ftpClient.nameList(ftpDirectory)); String filename = ""; while ((filename = dis.readLine()) != null) { list.add(filename); System.out.println(filename); } } catch (Exception e) { e.printStackTrace(); } return list; } /** * 删除FTP上的文件 * * @param ftpDirAndFileName */ public boolean deleteFile(String ftpDirAndFileName) { if (!open()) return false; ftpClient.sendServer("DELE " + ftpDirAndFileName + "\r\n"); return true; } /** * 删除FTP目录 * * @param ftpDirectory */ public boolean deleteDirectory(String ftpDirectory) { if (!open()) return false; ftpClient.sendServer("XRMD " + ftpDirectory + "\r\n"); return true; } /** * 关闭链接 */ public void close() { try { if (ftpClient != null && ftpClient.serverIsOpen()) ftpClient.closeServer(); } catch (Exception e) { } } public static void main(String []args) throws Exception{ DownFileForFtp df = new DownFileForFtp(); df.getFileNameList("E:\\uploadfiles\\cat"); df.download("E:\\uploadfiles\\cat\\2012-03-29.11.00.00.012.xml", "F:\\temp\\ftpdown\\2012-03-29.11.00.00.012.xml"); } }