Java中向ftp上傳、下載檔案

來源:互聯網
上載者:User

標籤:work   pass   pre   enter   目錄   res   file   名稱   filename   

最近的一個項目跟ftp打交道很多,經常需要向ftp上傳、下載檔案,現在總結一下公用方法。

上傳

/**     * 檔案上傳     *      * @param ip     *            host     * @param port     *            連接埠     * @param userName     *            使用者名稱     * @param passWord     *            密碼     * @param localpath     *            上傳檔案在本地磁碟路徑     * @param fileName     *            檔案名稱     * @param remotePath     *            檔案要上傳到ftp伺服器的路徑     * @throws Exception     */    public static Boolean fileFtpUpload(String ip, int port, String userName,            String passWord, String localpath, String fileName,            String remotePath) throws Exception {        FTPClient ftp = new FTPClient();// 建立用戶端對象        InputStream local = null;        boolean flag = false;        try {            checkIsExsitFile(localpath, fileName);// 判斷本地路徑下有無該檔案            SocketAddress address = new InetSocketAddress(ip, port);            ftp.connect(ip, port);// 串連            ftp.login(userName, passWord);// 登入            log.info("ftp伺服器串連、登陸成功,地址為:" + address);            // 檢查上傳路徑是否存在 如果不存在返回false            boolean flag1 = ftp.changeWorkingDirectory(remotePath);            if (!flag1) {                // 建立上傳的路徑 該方法只能建立一級目錄,在這裡如果/home/ftpuser存在則可建立image                // ftp.makeDirectory(path);                throw new Exception("ftp伺服器上沒有指定檔案目錄,請先建立:" + remotePath);            }            // 指定上傳路徑            ftp.changeWorkingDirectory(remotePath);            // 指定上傳檔案的類型 二進位檔案            ftp.setFileType(FTP.BINARY_FILE_TYPE);            // 讀取本地檔案            File file = new File(localpath + "\\" + fileName);            local = new FileInputStream(file);            // 第一個參數是檔案名稱            ftp.storeFile(file.getName(), local);            log.info("上傳成功");            flag = true;        } catch (SocketException e) {            log.info("上傳失敗" + e);            flag = false;            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                // 關閉檔案流                local.close();                // 退出                ftp.logout();                // 中斷連線                ftp.disconnect();            } catch (IOException e) {                e.printStackTrace();            }        }        return flag;    }

上傳檔案之前需要先判斷磁碟下有無指定檔案,判斷方法如下:

/** * 判斷檔案路徑下有無指定檔案 *  * @param filePath *            組建檔案名稱 * @param fileName *            檔案名稱 * @return 是否建立成功,成功則返回true */public static void checkIsExsitFile(String filePath, String fileName) {File dirFile = new File(filePath);// 檔案夾對象try {File[] files = dirFile.listFiles();Boolean bl = false;for (File file1 : files) {if (fileName.equals(file1.getName())) {bl = true;break;}}// 如果檔案夾內檔案不存在,則報錯if (!bl) {throw new Exception("檔案路徑下沒有指定上傳檔案");}} catch (Exception e) {e.printStackTrace();}}

注意在上傳之前一定要先切換到目前的目錄,即這一行

// 指定上傳路徑ftp.changeWorkingDirectory(remotePath);

同時需要指定上傳檔案的類型

// 指定上傳檔案的類型 二進位檔案ftp.setFileType(FTP.BINARY_FILE_TYPE);

 

下載

/**     * ftp下載檔案     *      * @param ip     * @param port     * @param userName     * @param passWord     * @param localPath     * @param remotePath     * @param fileContainsName     *            檔案包含名     * @return     * @throws Exception     */    public static String fileFtpDown(String ip, int port, String userName,            String passWord, String localPath, String remotePath,            String fileContainsName) throws Exception {        FTPClient ftpClient = new FTPClient();// 建立用戶端對象        String fileName = "";        SocketAddress address = new InetSocketAddress(ip, port);        ftpClient.connect(ip, port);// 串連        boolean login = ftpClient.login(userName, passWord);// 登陸        if (login) {            try {                log.info("ftp伺服器串連、登陸成功,地址為:" + address);                ftpClient.enterLocalPassiveMode();// 開通一個連接埠來傳輸資料                FTPFile[] fs = ftpClient.listFiles(remotePath);// fs為remoteFile下所有檔案集合                for (FTPFile ff : fs) {                    String f = new String(ff.getName().getBytes("iso-8859-1"),                            "utf-8");                    if (f.contains(fileContainsName)) {// 檔案名稱不確定時用contains                        File localFile = new File(localPath + "\\" + f); // 在本地指定路徑建立了一個對象                        OutputStream is = new FileOutputStream(localFile);                        ftpClient.changeWorkingDirectory(remotePath);// 設定下載檔案相對遠程FTP根目錄所處的路徑                        ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 開始下載檔案前設定傳輸類型                        ftpClient.retrieveFile(ff.getName(), is);                        is.close();                        fileName = f;                    }                    break;                }            } catch (IOException e) {                e.printStackTrace();            } finally {                if (ftpClient.isConnected()) {                    try {                        ftpClient.disconnect();                    } catch (IOException ioe) {                    }                }            }        } else {            log.info("ftp伺服器串連、登陸失敗");        }        return fileName;    }

 

  

  

 

Java中向ftp上傳、下載檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.