1. 程式人生 > >Java實現對ftp的讀寫檔案(apache.commons.net.ftp)

Java實現對ftp的讀寫檔案(apache.commons.net.ftp)

這裡僅僅是對ftp工具類的簡單使用,很多東西還不是很瞭解。當然學以致用,先用到這裡吧。

public class FtpTest {
 	/**
 	 * 向ftp寫檔案(資料)
 	 */
 	@Test
 	public void uploadFile() {
 
 		// 要寫入的檔案內容
 		String fileContent = "hello world,你好世界";
 		// ftp登入使用者名稱
 		String userName = "admin";
 		// ftp登入密碼
 		String userPassword = "xxxx";
 		// ftp地址
 		String server = "127.0.0.1";//直接ip地址
 		// 建立的檔案
 		String fileName = "ftp.txt";
 		// 指定寫入的目錄
 		String path = "wd";
 
 		FTPClient ftpClient = new FTPClient();
 		try {
 			InputStream is = null;
 			// 1.輸入流
 			is = new ByteArrayInputStream(fileContent.getBytes());
 			// 2.連線伺服器
 			ftpClient.connect(server);
 			// 3.登入ftp
 			ftpClient.login(userName, userPassword);
 			// 4.指定寫入的目錄
 			ftpClient.changeWorkingDirectory(path);
 			// 5.寫操作
 			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
 			ftpClient.storeFile(new String(fileName.getBytes("utf-8"),
 					"iso-8859-1"), is);
 			is.close();
 		} catch (Exception e) {
 			e.printStackTrace();
 		} finally {
 			if (ftpClient.isConnected()) {
 				try {
 					ftpClient.disconnect();
 				} catch (Exception e) {
 					e.printStackTrace();
 				}
 			}
 		}
 	}
 	
 	/**
 	 * ftp下載資料
 	 */
 	@Test
 	public void downFile() {
 		// ftp登入使用者名稱
 		String userName = "admin";
 		// ftp登入密碼
 		String userPassword = "xxxx";
 		// ftp地址:直接IP地址
 		String server = "xxxx";
 		// 建立的檔案
 		String fileName = "ftp.txt";
 		// 指定寫入的目錄
 		String path = "wd";
 		// 指定本地寫入檔案
 		String localPath="D:\\";
 		
 		FTPClient ftp = new FTPClient();
 		try {
 			int reply;
 			//1.連線伺服器
 			ftp.connect(server);
 			//2.登入伺服器 如果採用預設埠,可以使用ftp.connect(url)的方式直接連線FTP伺服器
 			ftp.login(userName, userPassword);
 			//3.判斷登陸是否成功
 			reply = ftp.getReplyCode();
 			if (!FTPReply.isPositiveCompletion(reply)) {
 				ftp.disconnect();
 			}
 			//4.指定要下載的目錄
 			ftp.changeWorkingDirectory(path);// 轉移到FTP伺服器目錄
 			//5.遍歷下載的目錄
 			FTPFile[] fs = ftp.listFiles();
 			for (FTPFile ff : fs) {
 				//解決中文亂碼問題,兩次解碼
 				byte[] bytes=ff.getName().getBytes("iso-8859-1");
 				String fn=new String(bytes,"utf8");
 				if (fn.equals(fileName)) {
 					//6.寫操作,將其寫入到本地檔案中
 					File localFile = new File(localPath + ff.getName());
 					OutputStream is = new FileOutputStream(localFile);
 					ftp.retrieveFile(ff.getName(), is);
 					is.close();
 				}
 			}
 			ftp.logout();
 		} catch (IOException e) {
 			e.printStackTrace();
 		} finally {
 			if (ftp.isConnected()) {
 				try {
 					ftp.disconnect();
 				} catch (IOException ioe) {
 				}
 			}
 		}
 	}
 }
 
很多知識點是相互聯絡的,希望以後的例子中能夠結合更多的知識點進行例項編寫,這樣也有助於知識的鞏固。