摘要:需要用到寫一個(gè)的工具,因?yàn)橹挥幸稽c(diǎn)點(diǎn)基礎(chǔ),但是由于好幾年不用,幾乎算是不會(huì)了,只好一點(diǎn)點(diǎn)來搞,還好能撿起來。對(duì)于下載工具,代碼如下這個(gè)工具是為了配合另外一個(gè)工具做集群上傳用的,所以里面的把和流分開了,也是為了方便另外一個(gè)工具使用。
需要用到 java 寫一個(gè) ftp 的工具,因?yàn)橹挥幸稽c(diǎn)點(diǎn) java 基礎(chǔ),但是由于好幾年不用,幾乎算是不會(huì)了,只好一點(diǎn)點(diǎn)來搞,還好能撿起來。
不過因?yàn)槭窃?Linux 下使用 javac 編譯,不是在 WIN 下使用 IDE 來做這些事情,所以在運(yùn)行和編譯上又費(fèi)了一些時(shí)間,不過正是因?yàn)檫@樣對(duì) JAVA 的一些編譯、運(yùn)行的知識(shí)又了解了一些。
對(duì)于 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這個(gè)工具是為了配合另外一個(gè) Hadoop 工具做 集群上傳用的,所以里面的把 input 和 output 流分開了,也是為了方便另外一個(gè)工具使用。
補(bǔ)充一點(diǎn),如何在 linux 配置運(yùn)行:
如果這樣的代碼需要在 linux 下環(huán)境運(yùn)行,首先要配置好響應(yīng)的包,例如
import org.apache.commons.net.ftp.FTPClient;這個(gè)包在 apache 的網(wǎng)站上直接下載就行,解壓后找到對(duì)應(yīng)的 jar 包,在編譯的時(shí)候進(jìn)行引用:
export FTPPATH="${路徑}/xxx.jar" javac -classpath $CLASSPATH:$FTPPATH FtpClient.java同樣,在運(yùn)行的時(shí)候也要指定 classpath:
java -classpath $CLASSPATH:$FTPPATH FtpClient建議不要把$FTPPATH 包含在 CLASSPATH 中,用什么包就引用什么環(huán)境變量就行了,沒必要一股腦都添加進(jìn)去,就像我們沒必要 import 所有的包一樣。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64279.html
摘要:是面向?qū)ο笳Z言這意味著支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對(duì)象的編程技術(shù)。在上執(zhí)行命令,就可以進(jìn)入到的交互模式,并顯示出版本等信息。選擇的版本,需要下載安裝包,然后進(jìn)行安裝。 一、Python簡介 Python 是一種解釋型語言: 這意味著開發(fā)過程中沒有了編譯這個(gè)環(huán)節(jié)。類似于PHP和Perl語言。 Python 是交互式語言: 這意味著,您可以在一個(gè)Python提示符,直接互動(dòng)執(zhí)行寫你的程...
摘要:對(duì)上的文件進(jìn)行上傳和下載是對(duì)集群的基本操作,在權(quán)威指南一書中,對(duì)文件的上傳和下載都有代碼的實(shí)例,但是對(duì)如何配置客戶端卻是沒有講得很清楚,經(jīng)過長時(shí)間的搜索和調(diào)試,總結(jié)了一下,如何配置使用集群的方法,以及自己測試可用的對(duì)集群上的文件進(jìn)行操作的程 對(duì)HDFS上的文件進(jìn)行上傳和下載是對(duì)集群的基本操作,在《HADOOP權(quán)威指南》一書中,對(duì)文件的上傳和下載都有代碼的實(shí)例,但是對(duì)如何配置HADOOP...
摘要:搭建圖片服務(wù)器本章內(nèi)容通過和搭建圖片服務(wù)器。第二個(gè)部分是為了更好的體驗(yàn)上傳,批量上傳,回顯功能的富文本編輯器??偨Y(jié)搭建服務(wù)器的思維實(shí)現(xiàn)上傳圖片的功能上傳圖片的功能源碼搭建圖片服務(wù)器到這里就結(jié)束了,有什么不足的地方,請(qǐng)賜教。 Nginx 搭建圖片服務(wù)器 本章內(nèi)容通過Nginx 和 FTP 搭建圖片服務(wù)器。在學(xué)習(xí)本章內(nèi)容前,請(qǐng)確保您的Linux 系統(tǒng)已經(jīng)安裝了Nginx和Vsftpd。 N...
摘要:今天,就為開發(fā)者介紹個(gè)方便的工具。對(duì)開發(fā)者來說,是一個(gè)非常有用的工具,它提供了超過個(gè)有用的函數(shù)。該工具檢查輸入源代碼和報(bào)告任何違反給定的標(biāo)準(zhǔn)??蚣苁且粋€(gè)開發(fā)的工具。它側(cè)重于安全性和性能,絕對(duì)是最安全的開發(fā)框架之一。 PHP是為Web開發(fā)設(shè)計(jì)的服務(wù)器腳本語言,但也是一種通用的編程語言。超過2.4億個(gè)索引域使用PHP,包括很多重要的網(wǎng)站,例如Facebook、Digg和WordPress。...
閱讀 3093·2021-09-22 15:20
閱讀 2611·2019-08-30 15:54
閱讀 1975·2019-08-30 14:06
閱讀 3123·2019-08-30 13:05
閱讀 2467·2019-08-29 18:36
閱讀 581·2019-08-29 15:10
閱讀 533·2019-08-29 11:17
閱讀 833·2019-08-28 18:11