Java寫檔案到ftp伺服器
阿新 • • 發佈:2019-02-18
/** * 將資料按照指定格式寫入 * @param data * @param fileName * @return */ public static InputStream write(String data){ InputStream input = null; try { input = new ByteArrayInputStream(data.getBytes("utf-8")); } catch (UnsupportedEncodingException e) { log.error("檔案寫入異常:",e); } return input; } /** * Description: 向FTP伺服器上傳檔案 * @param host FTP伺服器hostname * @param username FTP登入賬號 * @param password FTP登入密碼 * @param basePath FTP伺服器基礎目錄 * @param filePath FTP伺服器檔案存放路徑。例如分日期存放:/2015/01/01。檔案的路徑為basePath+filePath * @param filename 上傳到FTP伺服器上的檔名 * @param input 輸入流 * @return 成功返回true,否則返回false */ public static boolean uploadFile(String host, String username, String password, String basePath, String filePath, String filename, InputStream input) { boolean result = false; FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(host);// 連線FTP伺服器 // 如果採用預設埠,可以使用ftp.connect(host)的方式直接連線FTP伺服器 ftp.login(username, password);// 登入 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return result; } log.info("檔案目錄是否已存在:"+ftp.changeWorkingDirectory(filePath)); //切換到上傳目錄 if (!ftp.changeWorkingDirectory(filePath)) { //如果目錄不存在建立目錄 String[] dirs = filePath.split("/"); String tempPath = basePath; for (String dir : dirs) { if (null == dir || "".equals(dir)) continue; tempPath += "/" + dir; if (!ftp.changeWorkingDirectory(tempPath)) { if (!ftp.makeDirectory(tempPath)) { return result; } else { ftp.changeWorkingDirectory(tempPath); } } } } //設定上傳檔案的型別為二進位制型別 ftp.setFileType(FTP.BINARY_FILE_TYPE); if(input == null){ return false; } //上傳檔案 if (!ftp.storeFile(filename, input)) { return result; } input.close(); ftp.logout(); result = true; } catch (IOException e) { log.error("異常:", e); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { log.error("關閉ftp連線異常:", ioe); } } } return result; }