天天看點

【Java】JAVA中使用FTPClient上傳下載下傳【ZZ】

在JAVA程式中,經常需要和FTP打交道,比如向FTP伺服器上傳檔案、下載下傳檔案,本文簡單介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實作上傳下載下傳檔案。

一、上傳檔案

原理就不介紹了,大家直接看代碼吧

public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {
		boolean success = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(url, port);//連接配接FTP伺服器
			//如果采用預設端口,可以使用ftp.connect(url)的方式直接連接配接FTP伺服器
			ftp.login(username, password);//登入
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			ftp.changeWorkingDirectory(path);
			ftp.storeFile(filename, input);			

			input.close();
			ftp.logout();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}
           

下面我們寫兩個小例子:

1.将本地檔案上傳到FTP伺服器上,代碼如下:

@Test
	public void testUpLoadFromDisk(){
		try {
			FileInputStream in=new FileInputStream(new File("D:/test.txt"));
			boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in);
			System.out.println(flag);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
           

2.在FTP伺服器上生成一個檔案,并将一個字元串寫入到該檔案中

二、下載下傳檔案

從FTP伺服器下載下傳檔案的代碼也很簡單,參考如下:

public static boolean downFile(String url, int port,String username, String password, String remotePath,String fileName,String localPath) {
		boolean success = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(url, port);
			//如果采用預設端口,可以使用ftp.connect(url)的方式直接連接配接FTP伺服器
			ftp.login(username, password);//登入
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			ftp.changeWorkingDirectory(remotePath);//轉移到FTP伺服器目錄
			FTPFile[] fs = ftp.listFiles();
			for(FTPFile ff:fs){
				if(ff.getName().equals(fileName)){
					File localFile = new File(localPath+"/"+ff.getName());

					OutputStream is = new FileOutputStream(localFile); 
					ftp.retrieveFile(ff.getName(), is);
					is.close();
				}
			}

			ftp.logout();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}