一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java使用FTPClient類讀寫FTP

Java使用FTPClient類讀寫FTP

2020-09-17 15:44kardelpeng Java教程

這篇文章主要為大家詳細介紹了Java使用FTPClient類讀寫FTP的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java使用FTPClient類讀寫FTP的具體代碼,供大家參考,具體內容如下

1.首先先導入相關jar包

Java使用FTPClient類讀寫FTP

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步驟已講完。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美作爱福利免费观看视频 | 国产乱码一卡二卡3卡四卡 国产乱插 | 天美传媒传媒免费观看 | 国产偷啪视频一区 | 国产精品国色综合久久 | 奇米影视久久777中文字幕 | 高清日韩在线 | 美女被绑着吸下部的故事 | 国产人成77777视频网站 | 欧美日韩专区国产精品 | 国产色视频一区二区三区 | 日本护士厕所xxx | 日韩一级片在线播放 | 91免费永久在线地址 | 色综合久久日韩国产 | 奇米影视在线视频8888 | 西施打开双腿下面好紧 | 亚洲 欧美 国产 综合 在线 | 国产视频播放 | 美女舒服好紧太爽了视频 | 精品国产福利在线观看一区 | 大胸纲手被羞羞漫画网站 | 亚洲阿v天堂在线2017 | 9l国产精品久久久久麻豆 | tube4欧美4 | 亚洲一级特黄特黄的大片 | 奇米白色| 日本三级成人中文字幕乱码 | 十六一下岁女子毛片免费 | 99视频在线看观免费 | 强行扒开美女大腿挺进 | 18美女光胸光屁屁洗澡 | 日韩一区在线播放 | 日本中文字幕一区二区三区不卡 | 美女被扒开屁股进去网 | 亚洲热在线视频 | 国产成+人+亚洲+欧美综合 | 特黄特黄一级高清免费大片 | 国产里番| 大乳孕妇一级毛片 | 日韩 国产 欧美 精品 在线 |