本文實例為大家分享了Java使用FTPClient類讀寫FTP的具體代碼,供大家參考,具體內容如下
1.首先先導入相關jar包

2.創建一個連接FTP的工具類FTPUtil.java
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
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
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
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步驟已講完。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。