本文實例為大家分享了Java使用FTPClient類讀寫FTP的具體代碼,供大家參考,具體內容如下
1.首先先導入相關jar包
2.創建一個連接FTP的工具類FTPUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package com.metarnet.ftp.util; import java.io.IOException; import java.io.InputStream; import java.net.SocketException; import java.util.Properties; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.apache.log4j.Logger; public class FTPUtil { private static Logger logger = Logger.getLogger(FTPUtil. class ); /** * 獲取FTPClient對象 * @param ftpHost FTP主機服務器 * @param ftpPassword FTP 登錄密碼 * @param ftpUserName FTP登錄用戶名 * @param ftpPort FTP端口 默認為21 * @return */ public static FTPClient getFTPClient(String ftpHost, String ftpPassword, String ftpUserName, int ftpPort) { FTPClient ftpClient = null ; try { ftpClient = new FTPClient(); ftpClient.connect(ftpHost, ftpPort); // 連接FTP服務器 ftpClient.login(ftpUserName, ftpPassword); // 登陸FTP服務器 if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { logger.info( "未連接到FTP,用戶名或密碼錯誤。" ); ftpClient.disconnect(); } else { logger.info( "FTP連接成功。" ); } } catch (SocketException e) { e.printStackTrace(); logger.info( "FTP的IP地址可能錯誤,請正確配置。" ); } catch (IOException e) { e.printStackTrace(); logger.info( "FTP的端口錯誤,請正確配置。" ); } return ftpClient; } } |
3.編寫一個讀取FTP上文件的類ReadFTPFile.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package com.metarnet.ftp.read; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.SocketException; import org.apache.commons.net.ftp.FTPClient; import org.apache.log4j.Logger; import com.metarnet.ftp.util.FTPUtil; public class ReadFTPFile { private Logger logger = Logger.getLogger(ReadFTPFile. class ); /** * 去 服務器的FTP路徑下上讀取文件 * * @param ftpUserName * @param ftpPassword * @param ftpPath * @param FTPServer * @return */ public String readConfigFileForFTP(String ftpUserName, String ftpPassword, String ftpPath, String ftpHost, int ftpPort, String fileName) { StringBuffer resultBuffer = new StringBuffer(); FileInputStream inFile = null ; InputStream in = null ; FTPClient ftpClient = null ; logger.info( "開始讀取絕對路徑" + ftpPath + "文件!" ); try { ftpClient = FTPUtil.getFTPClient(ftpHost, ftpPassword, ftpUserName, ftpPort); ftpClient.setControlEncoding( "UTF-8" ); // 中文支持 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); ftpClient.changeWorkingDirectory(ftpPath); in = ftpClient.retrieveFileStream(fileName); } catch (FileNotFoundException e) { logger.error( "沒有找到" + ftpPath + "文件" ); e.printStackTrace(); return "下載配置文件失敗,請聯系管理員." ; } catch (SocketException e) { logger.error( "連接FTP失敗." ); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); logger.error( "文件讀取錯誤。" ); e.printStackTrace(); return "配置文件讀取失敗,請聯系管理員." ; } if (in != null ) { BufferedReader br = new BufferedReader( new InputStreamReader(in)); String data = null ; try { while ((data = br.readLine()) != null ) { resultBuffer.append(data + "\n" ); } } catch (IOException e) { logger.error( "文件讀取錯誤。" ); e.printStackTrace(); return "配置文件讀取失敗,請聯系管理員." ; } finally { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } else { logger.error( "in為空,不能讀取。" ); return "配置文件讀取失敗,請聯系管理員." ; } return resultBuffer.toString(); } } |
4.創建一個往FTP上寫入文件的類WriteFTPFile.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
package com.metarnet.ftp.write; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.log4j.Logger; import com.metarnet.ftp.util.FTPUtil; public class WriteFTPFile { private Logger logger = Logger.getLogger(WriteFTPFile. class ); /** * 本地上傳文件到FTP服務器 * * @param ftpPath * 遠程文件路徑FTP * @throws IOException */ public void upload(String ftpPath, String ftpUserName, String ftpPassword, String ftpHost, int ftpPort, String fileContent, String writeTempFielPath) { FTPClient ftpClient = null ; logger.info( "開始上傳文件到FTP." ); try { ftpClient = FTPUtil.getFTPClient(ftpHost, ftpPassword, ftpUserName, ftpPort); // 設置PassiveMode傳輸 ftpClient.enterLocalPassiveMode(); // 設置以二進制流的方式傳輸 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 對遠程目錄的處理 String remoteFileName = ftpPath; if (ftpPath.contains( "/" )) { remoteFileName = ftpPath .substring(ftpPath.lastIndexOf( "/" ) + 1 ); } // FTPFile[] files = ftpClient.listFiles(new // String(remoteFileName)); // 先把文件寫在本地。在上傳到FTP上最后在刪除 boolean writeResult = write(remoteFileName, fileContent, writeTempFielPath); if (writeResult) { File f = new File(writeTempFielPath + "/" + remoteFileName); InputStream in = new FileInputStream(f); ftpClient.storeFile(remoteFileName, in); in.close(); logger.info( "上傳文件" + remoteFileName + "到FTP成功!" ); f.delete(); } else { logger.info( "寫文件失敗!" ); } } catch (Exception e) { e.printStackTrace(); } finally { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } /** * 把配置文件先寫到本地的一個文件中取 * * @param ftpPath * @param str * @return */ public boolean write(String fileName, String fileContext, String writeTempFielPath) { try { logger.info( "開始寫配置文件" ); File f = new File(writeTempFielPath + "/" + fileName); if (!f.exists()){ if (!f.createNewFile()){ logger.info( "文件不存在,創建失敗!" ); } } BufferedWriter bw = new BufferedWriter( new FileWriter(f, true )); bw.write(fileContext.replaceAll( "\n" , "\r\n" )); bw.flush(); bw.close(); return true ; } catch (Exception e) { logger.error( "寫文件沒有成功" ); e.printStackTrace(); return false ; } } } |
5.建立一個測試類FTPMain.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package com.metarnet.ftp.main; import java.io.InputStream; import java.util.Properties; import org.apache.log4j.Logger; import com.metarnet.ftp.read.ReadFTPFile; import com.metarnet.ftp.util.FTPUtil; import com.metarnet.ftp.write.WriteFTPFile; public class FTPMain { private static Logger logger = Logger.getLogger(FTPMain. class ); public static void main(String[] args) { int ftpPort = 0 ; String ftpUserName = "" ; String ftpPassword = "" ; String ftpHost = "" ; String ftpPath = "" ; String writeTempFielPath = "" ; try { InputStream in = FTPUtil. class .getClassLoader() .getResourceAsStream( "env.properties" ); if (in == null ) { logger.info( "配置文件env.properties讀取失敗" ); } else { Properties properties = new Properties(); properties.load(in); ftpUserName = properties.getProperty( "ftpUserName" ); ftpPassword = properties.getProperty( "ftpPassword" ); ftpHost = properties.getProperty( "ftpHost" ); ftpPort = Integer.valueOf(properties.getProperty( "ftpPort" )) .intValue(); ftpPath = properties.getProperty( "ftpPath" ); writeTempFielPath = properties.getProperty( "writeTempFielPath" ); ReadFTPFile read = new ReadFTPFile(); String result = read.readConfigFileForFTP(ftpUserName, ftpPassword, ftpPath, ftpHost, ftpPort, "huawei_220.248.192.200.cfg" ); System.out.println( "讀取配置文件結果為:" + result); WriteFTPFile write = new WriteFTPFile(); ftpPath = ftpPath + "/" + "huawei_220.248.192.200_new1.cfg" ; write.upload(ftpPath, ftpUserName, ftpPassword, ftpHost, ftpPort, result, writeTempFielPath); } } catch (Exception e) { e.printStackTrace(); } } } |
最后肯定是執行,看最后執行結果,OK步驟已講完。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。