java搭建如何避免ftp上傳文件自動(dòng)覆蓋重名問題

自己依然無法解決



import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.MalformedURLException;

import java.util.List;

import org.apache.commons.net.ftp.FTP;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;

//import org.apache.commons.net.ftp.FTP;

public class FtpUtils {

// ftp服務(wù)器地址

public String hostname = "192.168.0.210";

// ftp服務(wù)器端口號(hào)默認(rèn)為21

public Integer port = 2121;

// ftp登錄賬號(hào)

public String username = "win";

// ftp登錄密碼

public String password = "nyznyznyz" + "";

public FTPClient ftpClient = null;

/**

* 初始化ftp服務(wù)器

*/

public void initFtpClient() {

ftpClient = new FTPClient();

ftpClient.setControlEncoding("utf-8");

try {

System.out.println("connecting...ftp服務(wù)器:" + this.hostname + ":" + this.port);

ftpClient.connect(hostname, port); // 連接ftp服務(wù)器

ftpClient.login(username, password); // 登錄ftp服務(wù)器

int replyCode = ftpClient.getReplyCode(); // 是否成功登錄服務(wù)器

if (!FTPReply.isPositiveCompletion(replyCode)) {

System.out.println("connect failed...ftp服務(wù)器:" + this.hostname + ":" + this.port);

}

System.out.println("connect successfu...ftp服務(wù)器:" + this.hostname + ":" + this.port);

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 上傳文件

*

* @param pathname? ? ? ftp服務(wù)保存地址

* @param fileName? ? ? 上傳到ftp的文件名

* @param originfilename 待上傳文件的名稱(絕對(duì)地址) *

* @return

*/

public boolean uploadFile(String pathname, String fileName, String originfilename) {

boolean flag = false;

InputStream inputStream = null;

try {

System.out.println("開始上傳文件");

inputStream = new FileInputStream(new File(originfilename));

initFtpClient();

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

CreateDirecroty(pathname);

ftpClient.makeDirectory(pathname);

ftpClient.changeWorkingDirectory(pathname);


ftpClient.storeFile(fileName, inputStream);

inputStream.close();

ftpClient.logout();

flag = true;

System.out.println("上傳文件全程走完");

} catch (Exception e) {

System.out.println("上傳文件失敗");

e.printStackTrace();

} finally {

if (ftpClient.isConnected()) {

try {

ftpClient.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

if (null != inputStream) {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return true;

}

/**

* 上傳文件

*

* @param pathname? ? ftp服務(wù)保存地址

* @param fileName? ? 上傳到ftp的文件名

* @param inputStream 輸入文件流

* @return

*/

public boolean uploadFile(String pathname, String fileName, InputStream inputStream) {

boolean flag = false;

try {

System.out.println("開始上傳文件");

initFtpClient();

ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);

CreateDirecroty(pathname);

ftpClient.makeDirectory(pathname);

ftpClient.changeWorkingDirectory(pathname);

ftpClient.storeFile(fileName, inputStream);

inputStream.close();

ftpClient.logout();

flag = true;

System.out.println("上傳文件成功");

} catch (Exception e) {

System.out.println("上傳文件失敗");

e.printStackTrace();

} finally {

if (ftpClient.isConnected()) {

try {

ftpClient.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

if (null != inputStream) {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return true;

}

// 改變目錄路徑

public boolean changeWorkingDirectory(String directory) {

boolean flag = true;

try {

flag = ftpClient.changeWorkingDirectory(directory);

if (flag) {

System.out.println("進(jìn)入文件夾" + directory + " 成功盲再!");

} else {

System.out.println("進(jìn)入文件夾" + directory + " 失敺酵ァ!開始創(chuàng)建文件夾");

}

} catch (IOException ioe) {

ioe.printStackTrace();

}

return flag;

}

// 創(chuàng)建多層目錄文件,如果有ftp服務(wù)器已存在該文件印屁,則不創(chuàng)建,如果無谷饿,則創(chuàng)建

public boolean CreateDirecroty(String remote) throws IOException {

boolean success = true;

String directory = remote + "/";

// 如果遠(yuǎn)程目錄不存在未荒,則遞歸創(chuàng)建遠(yuǎn)程服務(wù)器目錄

if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {

int start = 0;

int end = 0;

if (directory.startsWith("/")) {

start = 1;

} else {

start = 0;

}

end = directory.indexOf("/", start);

String path = "";

String paths = "";

while (true) {

String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");

path = path + "/" + subDirectory;

if (!existFile(path)) {

if (makeDirectory(subDirectory)) {

changeWorkingDirectory(subDirectory);

} else {

System.out.println("創(chuàng)建目錄[" + subDirectory + "]失敗");

//System.out.println("上傳文件失敗");

changeWorkingDirectory(subDirectory);

}

} else {

changeWorkingDirectory(subDirectory);

}

paths = paths + "/" + subDirectory;

start = end + 1;

end = directory.indexOf("/", start);

// 檢查所有目錄是否創(chuàng)建完畢

if (end <= start) {

break;

}

}

}

return success;

}

// 判斷ftp服務(wù)器文件是否存在

public boolean existFile(String path) throws IOException {

boolean flag = false;

FTPFile[] ftpFileArr = ftpClient.listFiles(path);

if (ftpFileArr.length > 0) {

flag = true;

}

return flag;

// 方法三:提示用戶重名,需重新命名

}

// 創(chuàng)建目錄

public boolean makeDirectory(String dir) {

boolean flag = true;

try {

flag = ftpClient.makeDirectory(dir);

if (flag) {

System.out.println("創(chuàng)建文件夾" + dir + " 成功!");

} else {

System.out.println("創(chuàng)建文件夾" + dir + " 失斀芋铩攒读!");

//return false;

}

} catch (Exception e) {

e.printStackTrace();

}

return flag;

}

/**

* * 下載文件 *

*

* @param pathname? FTP服務(wù)器文件目錄 *

* @param filename? 文件名稱 *

* @param localpath 下載后的文件路徑 *

* @return

*/

public boolean downloadFile(String pathname, String filename, String localpath) {

boolean flag = false;

OutputStream os = null;

try {

System.out.println("開始下載文件");

initFtpClient();

// 切換FTP目錄

ftpClient.changeWorkingDirectory(pathname);

FTPFile[] ftpFiles = ftpClient.listFiles();

for (FTPFile file : ftpFiles) {

if (filename.equalsIgnoreCase(file.getName())) {

File localFile = new File(localpath + "/" + file.getName());

os = new FileOutputStream(localFile);

ftpClient.retrieveFile(file.getName(), os);

os.close();

}

}

ftpClient.logout();

flag = true;

System.out.println("下載文件成功");

} catch (Exception e) {

System.out.println("下載文件失敗");

e.printStackTrace();

} finally {

if (ftpClient.isConnected()) {

try {

ftpClient.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

if (null != os) {

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return flag;

}

/**

* * 刪除文件 *

*

* @param pathname FTP服務(wù)器保存目錄 *

* @param filename 要?jiǎng)h除的文件名稱 *

* @return

*/

public boolean deleteFile(String pathname, String filename) {

boolean flag = false;

try {

System.out.println("開始刪除文件");

initFtpClient();

// 切換FTP目錄

ftpClient.changeWorkingDirectory(pathname);

ftpClient.dele(filename);

ftpClient.logout();

flag = true;

System.out.println("刪除文件成功");

} catch (Exception e) {

System.out.println("刪除文件失敗");

e.printStackTrace();

} finally {

if (ftpClient.isConnected()) {

try {

ftpClient.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return flag;

}

public static void main(String[] args) {

FtpUtils ftp = new FtpUtils();

ftp.uploadFile("ftpFile/data", "123.docx", "E://123.docx");

//ftp.downloadFile("ftpFile/data", "123.docx", "F://");

//ftp.deleteFile("ftpFile/data", "123.docx");

System.out.println("okkkkkk");

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辛友,隨后出現(xiàn)的幾起案子捻艳,更是在濱河造成了極大的恐慌,老刑警劉巖扁誓,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脱盲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)震放,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宾毒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人殿遂,你說我怎么就攤上這事诈铛。” “怎么了墨礁?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵幢竹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我恩静,道長(zhǎng)焕毫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任驶乾,我火速辦了婚禮邑飒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘级乐。我一直安慰自己疙咸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布风科。 她就那樣靜靜地躺著撒轮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贼穆。 梳的紋絲不亂的頭發(fā)上题山,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音故痊,去河邊找鬼顶瞳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛愕秫,可吹牛的內(nèi)容都是我干的浊仆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼豫领,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了舔琅?” 一聲冷哼從身側(cè)響起等恐,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后课蔬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囱稽,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年二跋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了战惊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扎即,死狀恐怖吞获,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谚鄙,我是刑警寧澤各拷,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站闷营,受9級(jí)特大地震影響烤黍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜傻盟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一速蕊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娘赴,春花似錦规哲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至关顷,卻和暖如春糊秆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背议双。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工痘番, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人平痰。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓汞舱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宗雇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昂芜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容