自己依然無法解決
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");
}
}