1. 程式人生 > >java下載、上傳、刪除ftp(FTPclient,適用JDK7以及linux下的ftp)

java下載、上傳、刪除ftp(FTPclient,適用JDK7以及linux下的ftp)

java下載、上傳、刪除ftp,使用org.apache.commons.net.ftp.FTPClient採用被動傳輸,之前使用sun.net.ftp.FtpClient上傳(點選開啟連結但在jdk7下使用報錯,因此這裡使用FTPClient進行FTP操作,能夠適用JDK1.7 以及 linux vsftpd的情況。

使用的包為commons-net-1.4.1.jar 

package muyunfei.ftpDemo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.SocketException;

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

/**
 * 
 * @author muyunfei  牟雲飛
 *
 */
public class FTPUtil {

	public static void main(String[] args) {
		FTPUtil util = new FTPUtil();
//		//上傳
//		File localFile=new File("G:\\photo2222222222222.png");
//		try {
//			boolean flag=util.uploadFile(localFile, "muyunfei.png");
//			System.out.println(flag +"   判斷上傳結果");
//		} catch (SocketException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
		//下載
		File localFile=new File("G:\\APP-release.apk");
		try {
			localFile.createNewFile();
			boolean flag=util.downloadFile("APP-release.apk",localFile);
			System.out.println(flag +"   判斷下載結果");
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//刪除
//		try {
//			boolean flag=util.deleteFile("muyunfei.png");
//			System.out.println(flag +"   判斷刪除結果");
//		} catch (SocketException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
	}
	
	
	public static String ftpHost;
	public static int port;
	public static String userName;
	public static String passWord;
	public static String path; //ftp下哪個目錄------------------
	public static String ftpEncode;
	public static int defaultTimeout;
	/**
	 * 靜態塊,初始化ftp資料
	 */
	static{
		try{
			
			ftpHost = "192.168.21.114";//linux
			//ftpHost = "192.168.1.103";//windows
			port = 21;			
			userName = "test";
			passWord = "111111";
			path = "ev_ftp"; //ftp下哪個目錄------------------
			ftpEncode="UTF-8";
			defaultTimeout = 30000;
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	/**
	 * 上傳ftp
	 * @param localFile
	 * @param fileNewName
	 * @return
	 * @throws SocketException
	 * @throws IOException
	 */
	public boolean uploadFile(File localFile,String fileNewName) throws SocketException, IOException{
		boolean flag=true;
		//獲得檔案流
		FileInputStream is=new FileInputStream(localFile);
		//儲存至Ftp
		FTPClient ftpClient = new FTPClient();// ftpHost為FTP伺服器的IP地址,port為FTP伺服器的登陸埠,ftpHost為String型,port為int型。
		ftpClient.setControlEncoding(ftpEncode); // 中文支援
		ftpClient.connect(ftpHost);
		ftpClient.login(userName, passWord);// userName、passWord分別為FTP伺服器的登陸使用者名稱和密碼
		ftpClient.setDefaultPort(port);
		ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
		ftpClient.enterLocalPassiveMode(); // 用被動模式傳輸,解決linux服務長時間等待,導致超時問題
		ftpClient.setDefaultTimeout(defaultTimeout);// 設定預設超時時間
		ftpClient.setBufferSize(1024*1024);//設定快取區,預設緩衝區大小是1024,也就是1K
		//切換目錄,目錄不存在建立目錄
		boolean chagenDirFlag=ftpClient.changeWorkingDirectory(path);
		if(chagenDirFlag==false){
			ftpClient.makeDirectory(path);
			ftpClient.changeWorkingDirectory(path);
		}
		//生成新的ftp檔名
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//		Date curDate = new Date();
//		String newFileName = fileName.substring(0, fileName.indexOf(".zip"))+sdf.format(curDate)+".zip";
		String newFileName = fileNewName;
		//上傳至Ftp
		flag=ftpClient.storeFile(newFileName, is);
		is.close();
		//關閉連線
		ftpClient.logout();
		ftpClient.disconnect();
		if(true==flag){
			System.out.println(fileNewName+"上傳圖片成功");
		}else{
			System.out.println(fileNewName+"上傳圖片失敗.......");
		}
		System.out.println("FTP檔名——"+newFileName);
		return flag;
	}
	
	/**
	 * 下載FTP
	 * @param ftpName  ftp上的檔名
	 * @param localFile  儲存的本地地址
	 * @return
	 * @throws SocketException
	 * @throws IOException
	 */
	public boolean downloadFile(String ftpName,File localFile) throws SocketException, IOException{
		boolean flag=true;
		//儲存至Ftp
		FTPClient ftpClient = new FTPClient();// ftpHost為FTP伺服器的IP地址,port為FTP伺服器的登陸埠,ftpHost為String型,port為int型。
		ftpClient.setControlEncoding(ftpEncode); // 中文支援
		ftpClient.connect(ftpHost);
		ftpClient.login(userName, passWord);// userName、passWord分別為FTP伺服器的登陸使用者名稱和密碼
		ftpClient.setDefaultPort(port);
		ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
		ftpClient.enterLocalPassiveMode(); // 用被動模式傳輸,解決linux服務長時間等待,導致超時問題
		ftpClient.setDefaultTimeout(defaultTimeout);// 設定預設超時時間
		ftpClient.setBufferSize(1024*1024);//設定快取區,預設緩衝區大小是1024,也就是1K
		//切換目錄,目錄不存在建立目錄
		boolean chagenDirFlag=ftpClient.changeWorkingDirectory(path);
		if(chagenDirFlag==false){
			System.out.println("ftp上目錄切換失敗");
			return false;
		}
		OutputStream os = new FileOutputStream(localFile);
		flag = ftpClient.retrieveFile(ftpName, os);
		if(true==flag){
			System.out.println(ftpName+"   檔案下載成功");
		}else{
			System.out.println(ftpName+"   檔案下載失敗");
		}
		os.flush();
		os.close();
		//關閉連線
		ftpClient.logout();
		ftpClient.disconnect();
		System.out.println("FTP檔名——"+ftpName);
		return flag;
	}
	
	/**
	 * 刪除FTP
	 * @param ftpName  ftp上的檔名
	 * @param localFile  儲存的本地地址
	 * @return
	 * @throws SocketException
	 * @throws IOException
	 */
	public boolean deleteFile(String ftpName) throws SocketException, IOException{
		boolean flag=true;
		//儲存至Ftp
		FTPClient ftpClient = new FTPClient();// ftpHost為FTP伺服器的IP地址,port為FTP伺服器的登陸埠,ftpHost為String型,port為int型。
		ftpClient.setControlEncoding(ftpEncode); // 中文支援
		ftpClient.connect(ftpHost);
		ftpClient.login(userName, passWord);// userName、passWord分別為FTP伺服器的登陸使用者名稱和密碼
		ftpClient.setDefaultPort(port);
		ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
		ftpClient.enterLocalPassiveMode(); // 用被動模式傳輸,解決linux服務長時間等待,導致超時問題
		ftpClient.setDefaultTimeout(defaultTimeout);// 設定預設超時時間
		//切換目錄,目錄不存在建立目錄
		boolean chagenDirFlag=ftpClient.changeWorkingDirectory(path);
		if(chagenDirFlag==false){
			System.out.println("ftp上目錄切換失敗");
			return false;
		}
		flag = ftpClient.deleteFile(ftpName);
		if(true==flag){
			System.out.println(ftpName+"   檔案刪除成功");
		}else{
			System.out.println(ftpName+"   檔案刪除失敗");
		}
		//關閉連線
		ftpClient.logout();
		ftpClient.disconnect();
		System.out.println("FTP檔名——"+ftpName);
		return flag;
	}
}