java遠端操作ftp伺服器上傳下載
阿新 • • 發佈:2018-11-25
注意裡面的檔案編碼,連線過程編碼與伺服器編碼不一致的話會導致上傳中文亂碼情況。
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ftp.*; import org.apache.log4j.Logger; public class FtpUtil { static Logger Log = Logger.getLogger(FtpUtil.class); private FTPClient ftpClient; private static String ENCODING = "GBK"; FTPClientConfig ftpConfig = new FTPClientConfig("UNIX"); public boolean connectServer(String address,int port,String name,String passwd) { boolean flag = false; try { ftpClient = new FTPClient(); ftpConfig.setServerLanguageCode("ISO-8859-1"); ftpClient.connect(address, port); if(ftpClient.login(name,passwd)){ if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) { ENCODING = "UTF-8"; } ftpClient.setControlEncoding(ENCODING); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); ftpClient.setDataTimeout(120000); } int reply = ftpClient.getReplyCode(); if (FTPReply.isPositiveCompletion(reply)) { flag = true; Log.info("FTP connect success!"); } else { Log.warn("FTP refused to connect!"); ftpClient.disconnect(); } } catch (Exception e) { Log.error("Failed to login ftp " + address + ":" + port, e); } return flag; } public boolean existFile(String path) throws IOException { boolean flag = false; FTPFile[] ftpFileArr = ftpClient.listFiles(path); if (ftpFileArr.length > 0) { flag = true; } return flag; } public boolean makeDirectory(String dir) { boolean flag = true; try { String newdir = new String(dir.getBytes(ENCODING), "ISO-8859-1"); flag = ftpClient.makeDirectory(newdir); if (flag) { Log.info("make directory " + newdir + " successfully !"); } else { Log.info("make directory " + newdir + " failed !"); } } catch (Exception e) { e.printStackTrace(); } return flag; } public boolean uploadFile(String remoteFilePath, File uploadFile) throws IOException { boolean flag = false; InputStream input = null; try { input = new FileInputStream(uploadFile); String remote = new String(remoteFilePath.getBytes(ENCODING), "ISO-8859-1"); if (ftpClient.appendFile(remote, input)) { flag = true; } } finally { input.close(); } Log.info("push file (" + uploadFile.getCanonicalPath() + ") => " + (flag ? "SUCCESS" : "FAILED")); return flag; } public void closeConnect() { try { if (ftpClient != null) { ftpClient.logout(); ftpClient.disconnect(); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ FtpUtil ftpClient = new FtpUtil(); //擷取最後一個"/",獲取檔案目錄 String fileAllName = "/home/cld123/springbootFtpTest/linux節145.txt"; File uploadFile = new File("C:\\Users\\tyx123\\Desktop\\txt\\linux節點配置.txt"); String uploadFileDir = fileAllName.substring(0,fileAllName.lastIndexOf("/")+1); try { if(ftpClient.connectServer("192.168.0.223",21,"cld123","cld123")){ if(!ftpClient.existFile(uploadFileDir)){ ftpClient.makeDirectory(uploadFileDir); } boolean flag = ftpClient.uploadFile(fileAllName, uploadFile); } } catch (IOException e) { e.printStackTrace(); } ftpClient.closeConnect(); } }