摘要:需要用到寫一個的工具,因為只有一點點基礎,但是由于好幾年不用,幾乎算是不會了,只好一點點來搞,還好能撿起來。對于下載工具,代碼如下這個工具是為了配合另外一個工具做集群上傳用的,所以里面的把和流分開了,也是為了方便另外一個工具使用。
需要用到 java 寫一個 ftp 的工具,因為只有一點點 java 基礎,但是由于好幾年不用,幾乎算是不會了,只好一點點來搞,還好能撿起來。
不過因為是在 Linux 下使用 javac 編譯,不是在 WIN 下使用 IDE 來做這些事情,所以在運行和編譯上又費了一些時間,不過正是因為這樣對 JAVA 的一些編譯、運行的知識又了解了一些。
對于 ftp 下載工具,代碼如下:
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; public class FtpClient { private String host; private int port; private String username; private String password; private boolean binaryTransfer = true; private boolean passiveMode = true; private String encoding = "UTF-8"; private int clientTimeout = 3000; private boolean flag=true; private FTPClient ftpClient = null; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isBinaryTransfer() { return binaryTransfer; } public void setBinaryTransfer(boolean binaryTransfer) { this.binaryTransfer = binaryTransfer; } public boolean isPassiveMode() { return passiveMode; } public void setPassiveMode(boolean passiveMode) { this.passiveMode = passiveMode; } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } public int getClientTimeout() { return clientTimeout; } public void setClientTimeout(int clientTimeout) { this.clientTimeout = clientTimeout; } public FtpClient(String Host) { this.username = "anonymous"; this.encoding = "utf-8"; this.binaryTransfer = true; this.binaryTransfer = true; this.port = 21; this.host = Host; try { this.ftpClient = getFTPClient(); } catch (Exception e) { System.out.println("Create FTPClient error!"); } } private FTPClient getFTPClient() throws IOException { FTPClient ftpClient = new FTPClient(); ftpClient.setControlEncoding(encoding); connect(ftpClient); if (passiveMode) { ftpClient.enterLocalPassiveMode(); } setFileType(ftpClient); try { ftpClient.setSoTimeout(clientTimeout); } catch (SocketException e) { throw new IOException("Set timeout error.", e); } return ftpClient; } private void setFileType(FTPClient ftpClient) throws IOException { try { if (binaryTransfer) { ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); } else { ftpClient.setFileType(FTPClient.ASCII_FILE_TYPE); } } catch (IOException e) { throw new IOException("Could not to set file type.", e); } } public boolean connect(FTPClient ftpClient) throws IOException { try { ftpClient.connect(host, port); int reply = ftpClient.getReplyCode(); if (FTPReply.isPositiveCompletion(reply)) { if (ftpClient.login(username, password)) { setFileType(ftpClient); return true; } } else { this.ftpClient.disconnect(); throw new IOException("FTP server refused connection."); } } catch (IOException e) { if (this.ftpClient.isConnected()) { try { this.ftpClient.disconnect(); } catch (IOException e1) { throw new IOException("Could not disconnect from server.", e); } } throw new IOException("Could not connect to server.", e); } return false; } private void disconnect() throws IOException { try { this.ftpClient.logout(); } catch (IOException e) { System.out.println("logout may timeout!"); } finally { if (this.ftpClient.isConnected()) { this.ftpClient.disconnect(); } } } public InputStream getStream(String serverFile) throws IOException { InputStream inStream = null; try { inStream = this.ftpClient.retrieveFileStream(serverFile); System.out.println("inStream get over!"); return inStream; } catch (IOException e) { System.out.println("get stream exception"); return null; } } public boolean writeStream(InputStream input, String localFile) throws IOException { FileOutputStream fout = new FileOutputStream(localFile); int ch = 0; if(input == null){ System.out.println("input is null"); return false; } try { ch = input.read(); while(ch != -1){ fout.write(ch); ch = input.read(); } System.out.println("write over!"); return flag; } catch (IOException e) { throw new IOException("Couldn"t get file from server.", e); } } public boolean isExist(String remoteFilePath)throws IOException{ try{ File file=new File(remoteFilePath); String remotePath=remoteFilePath.substring(0,(remoteFilePath.indexOf(file.getName())-1)); String[] listNames = this.ftpClient.listNames(remotePath); System.out.println(remoteFilePath); for(int i=0;i這個工具是為了配合另外一個 Hadoop 工具做 集群上傳用的,所以里面的把 input 和 output 流分開了,也是為了方便另外一個工具使用。
補充一點,如何在 linux 配置運行:
如果這樣的代碼需要在 linux 下環境運行,首先要配置好響應的包,例如
import org.apache.commons.net.ftp.FTPClient;這個包在 apache 的網站上直接下載就行,解壓后找到對應的 jar 包,在編譯的時候進行引用:
export FTPPATH="${路徑}/xxx.jar" javac -classpath $CLASSPATH:$FTPPATH FtpClient.java同樣,在運行的時候也要指定 classpath:
java -classpath $CLASSPATH:$FTPPATH FtpClient建議不要把$FTPPATH 包含在 CLASSPATH 中,用什么包就引用什么環境變量就行了,沒必要一股腦都添加進去,就像我們沒必要 import 所有的包一樣。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64279.html
摘要:是面向對象語言這意味著支持面向對象的風格或代碼封裝在對象的編程技術。在上執行命令,就可以進入到的交互模式,并顯示出版本等信息。選擇的版本,需要下載安裝包,然后進行安裝。 一、Python簡介 Python 是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似于PHP和Perl語言。 Python 是交互式語言: 這意味著,您可以在一個Python提示符,直接互動執行寫你的程...
摘要:對上的文件進行上傳和下載是對集群的基本操作,在權威指南一書中,對文件的上傳和下載都有代碼的實例,但是對如何配置客戶端卻是沒有講得很清楚,經過長時間的搜索和調試,總結了一下,如何配置使用集群的方法,以及自己測試可用的對集群上的文件進行操作的程 對HDFS上的文件進行上傳和下載是對集群的基本操作,在《HADOOP權威指南》一書中,對文件的上傳和下載都有代碼的實例,但是對如何配置HADOOP...
摘要:搭建圖片服務器本章內容通過和搭建圖片服務器。第二個部分是為了更好的體驗上傳,批量上傳,回顯功能的富文本編輯器。總結搭建服務器的思維實現上傳圖片的功能上傳圖片的功能源碼搭建圖片服務器到這里就結束了,有什么不足的地方,請賜教。 Nginx 搭建圖片服務器 本章內容通過Nginx 和 FTP 搭建圖片服務器。在學習本章內容前,請確保您的Linux 系統已經安裝了Nginx和Vsftpd。 N...
摘要:今天,就為開發者介紹個方便的工具。對開發者來說,是一個非常有用的工具,它提供了超過個有用的函數。該工具檢查輸入源代碼和報告任何違反給定的標準。框架是一個開發的工具。它側重于安全性和性能,絕對是最安全的開發框架之一。 PHP是為Web開發設計的服務器腳本語言,但也是一種通用的編程語言。超過2.4億個索引域使用PHP,包括很多重要的網站,例如Facebook、Digg和WordPress。...
閱讀 3077·2021-09-22 15:20
閱讀 2600·2019-08-30 15:54
閱讀 1966·2019-08-30 14:06
閱讀 3114·2019-08-30 13:05
閱讀 2457·2019-08-29 18:36
閱讀 568·2019-08-29 15:10
閱讀 523·2019-08-29 11:17
閱讀 818·2019-08-28 18:11