Java實(shí)現(xiàn)ftp上傳下載、刪除文件及在ftp服務(wù)器上傳文件夾的方法
一個(gè)JAVA 實(shí)現(xiàn)FTP功能的代碼,包括了服務(wù)器的設(shè)置模塊,并包括有上傳文件至FTP的通用方法、下載文件的通用方法以及刪除文件、在ftp服務(wù)器上傳文件夾、檢測(cè)文件夾是否存在等,里面的有些代碼對(duì)編寫(xiě)JAVA文件上傳或許有參考價(jià)值,Java FTP主文件代碼:
package ftpDemo;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class ftpUtil {
// 上傳文件至FTP通用方法
public static void upLoadFileFtp(KmConfig kmConfig,InputStream is, String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務(wù)器的IP地址,port為FTP服務(wù)器的登陸端口,ftpHost為String型,port為int型。
ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務(wù)器的登陸用戶(hù)名和密碼
ftpClient.binary();
ftpClient.cd(path);// path為FTP服務(wù)器上保存上傳文件的路徑。
TelnetOutputStream telnetOut = ftpClient.put(fileName);// fileName為上傳的文件名
DataOutputStream dataOut = new DataOutputStream(telnetOut);
byte buffer[] = new byte[ * ];
int count = ;
while ((count = is.read(buffer)) != -) {
dataOut.write(buffer, , count);
}
telnetOut.close();
dataOut.close();
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("上傳文件失??!請(qǐng)檢查系統(tǒng)FTP設(shè)置,并確認(rèn)FTP服務(wù)啟動(dòng)");
}
}
// 刪除文件至FTP通用方法
public static void deleteFileFtp(KmConfig kmConfig,String fileName){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務(wù)器的IP地址,port為FTP服務(wù)器的登陸端口,ftpHost為String型,port為int型。
ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務(wù)器的登陸用戶(hù)名和密碼
ftpClient.binary();
ftpClient.cd(path);// path為FTP服務(wù)器上保存上傳文件的路徑。
try {
ftpClient.sendServer("dele " + fileName + "\r\n");
} catch (Exception e) {
System.out.println("刪除文件失??!請(qǐng)檢查系統(tǒng)FTP設(shè)置,并確認(rèn)FTP服務(wù)啟動(dòng)");
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("刪除文件失??!");
}
}
// 下載ftp文件
public static void downloadFileFtp(KmConfig kmConfig,String fileName, String clientFileName, OutputStream outputStream){
try {
String ftpHost = kmConfig.getFtpHost();
int port = kmConfig.getFtpPort();
String userName = kmConfig.getFtpUser();
String passWord = kmConfig.getFtpPassword();
String path = kmConfig.getFtpPath();
FtpClient ftpClient = new FtpClient(ftpHost, port);// ftpHost為FTP服務(wù)器的IP地址,port為FTP服務(wù)器的登陸端口,ftpHost為String型,port為int型。
ftpClient.login(userName, passWord);// userName、passWord分別為FTP服務(wù)器的登陸用戶(hù)名和密碼
ftpClient.binary();
ftpClient.cd(path);// path為FTP服務(wù)器上保存上傳文件的路徑。
try {
TelnetInputStream in = ftpClient.get(fileName);
byte[] bytes = new byte[];
int cnt=;
while ((cnt=in.read(bytes,,bytes.length)) != -) {
outputStream.write(bytes, , cnt);
}
outputStream.close();
in.close();
} catch (Exception e) {
ftpClient.closeServer();
e.printStackTrace();
}
ftpClient.closeServer();
} catch (Exception e) {
System.out.println("下載文件失敗!請(qǐng)檢查系統(tǒng)FTP設(shè)置,并確認(rèn)FTP服務(wù)啟動(dòng)");
}
}
//在ftp服務(wù)器上傳件文件夾
public boolean createDir(String path,FtpClient ftpClient) throws Exception{
//進(jìn)入到home文件夾下
ftpClient.cd("/home");
//創(chuàng)建遠(yuǎn)程文件夾
//遠(yuǎn)程命令包括
//USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>
// PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br>
// ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br>
// REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br>
// QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br>
// 在服務(wù)器上執(zhí)行命令,如果用sendServer來(lái)執(zhí)行遠(yuǎn)程命令(不能執(zhí)行本地FTP命令)的話(huà),所有FTP命令都要加上/r/n<br>
// ftpclient.sendServer("XMKD /test/bb/r/n"); //執(zhí)行服務(wù)器上的FTP命令<br>
// ftpclient.readServerResponse一定要在sendServer后調(diào)用<br>
// nameList("/test")獲取指目錄下的文件列表<br>
// XMKD建立目錄,當(dāng)目錄存在的情況下再次創(chuàng)建目錄時(shí)報(bào)錯(cuò)<br>
// XRMD刪除目錄<br>
// DELE刪除文件<br>
//通過(guò)遠(yuǎn)程命令 穿件一個(gè)files文件夾
ftpClient.sendServer("MKD "+ path + "\r\n");
//這個(gè)方法必須在 這兩個(gè)方法中間調(diào)用 否則 命令不管用
ftpClient.binary();
ftpClient.readServerResponse();
return false;
}
/**
* 檢查文件夾是否存在
* @param dir
* @param ftpClient
* @return
*/
public boolean isDirExist(String dir, FtpClient ftpClient) {
try {
ftpClient.cd(dir);
} catch (Exception e) {
return false;
}
return true;
}
}
KmConfig.java代碼如下:定義FTP服務(wù)器參數(shù),包括登錄的用戶(hù)名密碼之類(lèi)的。
package ftpDemo;
public class KmConfig {
//主機(jī)ip
private String FtpHost = "";
//端口號(hào)
private int FtpPort;
//ftp用戶(hù)名
private String FtpUser = "";
//ftp密碼
private String FtpPassword = "";
//ftp中的目錄
private String FtpPath = "";
public String getFtpHost() {
return FtpHost;
}
public void setFtpHost(String ftpHost) {
FtpHost = ftpHost;
}
public int getFtpPort() {
return FtpPort;
}
public void setFtpPort(int ftpPort) {
FtpPort = ftpPort;
}
public String getFtpUser() {
return FtpUser;
}
public void setFtpUser(String ftpUser) {
FtpUser = ftpUser;
}
public String getFtpPassword() {
return FtpPassword;
}
public void setFtpPassword(String ftpPassword) {
FtpPassword = ftpPassword;
}
public String getFtpPath() {
return FtpPath;
}
public void setFtpPath(String ftpPath) {
FtpPath = ftpPath;
}
}
下面是測(cè)試代碼:
package ftpDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
//設(shè)置ftp
KmConfig km = new KmConfig();
km.setFtpHost("...");
km.setFtpPort();
km.setFtpUser("test");
km.setFtpPassword("");
km.setFtpPath("KM");
//上傳到ftp
ftpUtil util=new ftpUtil();
File file = new File("F:/文章.jpg");
InputStream in;
try {
in = new FileInputStream(file);
util.upLoadFileFtp(km, in, "更改后的名字.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上代碼是小編給大家介紹關(guān)于Java實(shí)現(xiàn)ftp上傳下載、刪除文件及在ftp服務(wù)器上傳文件夾的方法,希望大家喜歡。
相關(guān)文章
如何基于spring security實(shí)現(xiàn)在線(xiàn)用戶(hù)統(tǒng)計(jì)
這篇文章主要介紹了如何基于spring security實(shí)現(xiàn)在線(xiàn)用戶(hù)統(tǒng)計(jì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
SpringBoot通過(guò)ip獲取歸屬地的幾種方式分享
在日常我們逛網(wǎng)站的時(shí)候會(huì)發(fā)現(xiàn)我們登錄后會(huì)出現(xiàn)歸屬地信息,例如:我在廣州登錄會(huì)顯示廣東廣州,有些更加精確的會(huì)顯示到區(qū)縣,那么我們來(lái)看看有哪些方式來(lái)獲取歸屬地信息,今天我們來(lái)聊一聊2023-09-09
關(guān)于maven使用過(guò)程中無(wú)法導(dǎo)入依賴(lài)的一些總結(jié)
這篇文章主要介紹了關(guān)于maven使用過(guò)程中無(wú)法導(dǎo)入依賴(lài)的一些總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Springboot 整合 Java DL4J 實(shí)現(xiàn)醫(yī)學(xué)影像診斷功能介紹
本文介紹如何利用SpringBoot整合Java Deeplearning4j實(shí)現(xiàn)醫(yī)學(xué)影像診斷功能,重點(diǎn)介紹了卷積神經(jīng)網(wǎng)絡(luò)在處理醫(yī)學(xué)影像中的應(yīng)用,以及如何進(jìn)行數(shù)據(jù)預(yù)處理、模型構(gòu)建、訓(xùn)練與預(yù)測(cè),提供了詳細(xì)的代碼實(shí)現(xiàn)和單元測(cè)試方法,目的是輔助醫(yī)生更準(zhǔn)確快速地進(jìn)行疾病診斷2024-10-10
java實(shí)現(xiàn)水仙花數(shù)的計(jì)算
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)水仙花數(shù)的計(jì)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
JAVA微信掃碼支付模式二線(xiàn)上支付功能實(shí)現(xiàn)以及回調(diào)
本篇文章主要介紹了JAVA微信掃碼支付模式二線(xiàn)上支付功能實(shí)現(xiàn)以及回調(diào),這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11

