java通过ftp上传、下载文件,遍历文件目录

来源:互联网 发布:原宿风衣服淘宝店铺 编辑:程序博客网 时间:2024/05/05 08:02
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 List<String> getFileNameList(String ftpDirectory) {List<String> list = new ArrayList<String>();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");}}

原创粉丝点击