程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java ftp,java

java ftp,java

編輯:JAVA綜合教程

java ftp,java


FTPUtil

 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FTPUtil {
    // public static final String platform_charset = "utf-8";
    public static final String platform_charset = "gb2312";

    public static boolean uploadFile(String url, int port, String username,
            String password, String path, String filename, InputStream input)
            throws IOException {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(url, port);
            ftp.login(username, password);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            path = path.replaceAll("//", "/");
            if (path.startsWith("/"))
                path = path.substring(1);
            if (filename.startsWith("/"))
                filename = filename.substring(1);

            String dir = new String(path.getBytes(platform_charset),"iso-8859-1");
            String destName = new String(filename.getBytes(platform_charset),"iso-8859-1");
            buildList(ftp, dir);

            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.changeWorkingDirectory(dir);
            boolean flag = ftp.storeFile(destName, input);
            input.close();
            ftp.logout();

            if (flag) 
                success = true;
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }
        return success;
    }

    public static void sendFile(String url, int port,
            String username, String password, String path, String filename,
            InputStream input) throws IOException {
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(url, port);
            ftp.login(username, password);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return;
            }

            if (path.startsWith("/"))
                path = path.substring(1);
            if (filename.startsWith("/"))
                filename = filename.substring(1);

            String dir = new String(path.getBytes(platform_charset),
                    "iso-8859-1");
            String destName = new String(filename.getBytes(platform_charset),
                    "iso-8859-1");
            buildList(ftp, dir);

            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.changeWorkingDirectory(dir);

            int n = -1;
            long trans = 0;
            int bufferSize = ftp.getBufferSize();
            byte[] buffer = new byte[bufferSize];
            OutputStream outputstream = ftp.storeFileStream(destName);
            while ((n = input.read(buffer)) != -1) {
                outputstream.write(buffer);
                trans += n;
            }
            input.close();
            ftp.logout();

        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }

    }

    public static void buildList(FTPClient ftpclient, String pathList)
            throws IOException {
        StringTokenizer s = new StringTokenizer(pathList, "/");

        String pathName = "";
        while (s.hasMoreElements()) {
            pathName = pathName + "/" + (String) s.nextElement();

            if (pathName.startsWith("/"))
                pathName = pathName.substring(1);
            ftpclient.makeDirectory(pathName);
        }
    }

    public static boolean downFile(String url, int port, String username,
            String password, String remotePath, String fileName,
            String localPath) throws IOException {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(url, port);
            ftp.login(username, password);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }

            remotePath = new String(remotePath.getBytes(platform_charset),
                    "iso-8859-1");
            ftp.changeWorkingDirectory(remotePath);
            FTPFile[] fs = ftp.listFiles();
            for (FTPFile ff : fs) {
                String name = ff.getName();
                name = new String(name.getBytes("iso-8859-1"), platform_charset);
                if (name.equals(fileName)) {
                    File localPathFile = new File(localPath);
                    //判斷路徑是否存在 ,不存在則創建
                    if(!localPathFile.exists()){
                        localPathFile.mkdirs();
                    }
                    File localFile = new File(localPath + "/" + name);
                    
                    OutputStream os = new FileOutputStream(localFile);
                    ftp.retrieveFile(ff.getName(), os);
                    os.close();
                }
            }
            ftp.logout();
            success = true;
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

    public static List<FTPFile> list(String url, int port, String username,
            String password, String remotePath) throws Exception {
        FTPClient ftp = new FTPClient();
        List<FTPFile> list = new ArrayList<FTPFile>();
        try {
            int reply;
            ftp.connect(url, port);
            ftp.login(username, password);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return list;
            }
            remotePath = new String(remotePath.getBytes(platform_charset),
                    "iso-8859-1");
            ftp.changeWorkingDirectory(remotePath);
            FTPFile[] files = ftp.listFiles();
            for (FTPFile f : files) {
                String name = f.getName();
                if (name.equals(".") || name.equals("..")
                        || name.equals("Thumbs.db"))
                    continue;

                list.add(f);
            }
            return list;
        } catch (IOException e) {
            e.printStackTrace();
            return list;
        } finally {
            ftp.logout();
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
    }

    public static boolean hasSubFolder(FTPClient ftp, String parent)
            throws IOException {
        FTPFile[] files = ftp.listFiles(parent);
        for (FTPFile f : files) {
            String name = f.getName();
            if (name.equals(".") || name.equals("..")
                    || name.equals("Thumbs.db"))
                continue;

            if (f.isDirectory()) {
                return true;
            } else {
                continue;
            }
        }
        return false;

    }

    public static boolean deleteFile(String url, int port, String username,
            String password, String remotePath) throws IOException {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(url, port);
            ftp.login(username, password);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }

            remotePath = new String(remotePath.getBytes(platform_charset),
                    "iso-8859-1");
            if (remotePath.startsWith("/"))
                remotePath = remotePath.substring(1);

            ftp.changeWorkingDirectory(remotePath);
            FTPFile[] fs = ftp.listFiles();
            for (FTPFile ff : fs) {
                String name = ff.getName();
                ftp.deleteFile(name);
            }
            ftp.changeToParentDirectory();
            int p = remotePath.lastIndexOf("/");
            String folderName = remotePath.substring(p + 1);
            ftp.removeDirectory(folderName);

            ftp.logout();
            success = true;
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved