java通過ftp上傳、下載文件,遍歷文件目錄

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");
 
    }
     
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章