您好,登錄后才能下訂單哦!
如何在JAVA項目中利用FTPClient工具類實現一個上傳下載功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
1、寫一個javabean文件,描述ftp上傳或下載的信息
實例代碼:
public class FtpUseBean { private String host; private Integer port; private String userName; private String password; private String ftpSeperator; private String ftpPath=""; private int repeatTime = 0;//連接ftp服務器的次數 public String getHost() { return host; } public void setHost(String host) { this.host = host; } public Integer getPort() { return port; } public void setPort(Integer 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 void setFtpSeperator(String ftpSeperator) { this.ftpSeperator = ftpSeperator; } public String getFtpSeperator() { return ftpSeperator; } public void setFtpPath(String ftpPath) { if(ftpPath!=null) this.ftpPath = ftpPath; } public String getFtpPath() { return ftpPath; } public void setRepeatTime(int repeatTime) { if (repeatTime > 0) this.repeatTime = repeatTime; } public int getRepeatTime() { return repeatTime; } /** * take an example:<br> * ftp://userName:password@ip:port/ftpPath/ * @return */ public String getFTPURL() { StringBuffer buf = new StringBuffer(); buf.append("ftp://"); buf.append(getUserName()); buf.append(":"); buf.append(getPassword()); buf.append("@"); buf.append(getHost()); buf.append(":"); buf.append(getPort()); buf.append("/"); buf.append(getFtpPath()); return buf.toString(); } }
2、導入包commons-net-1.4.1.jar
package com.util; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.SocketException; import java.net.URL; import java.net.URLConnection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import com.bean.FtpUseBean; public class FtpUtil extends FTPClient { private static Log log = LogFactory.getLog(FtpUtil.class); private FtpUseBean ftpUseBean; //獲取目標路徑下的文件屬性信息,主要是獲取文件的size private FTPFile[] files; public FtpUseBean getFtpUseBean() { return ftpUseBean; } public FtpUtil(){ super(); } public void setFtpUseBean(FtpUseBean ftpUseBean) { this.ftpUseBean = ftpUseBean; } public boolean ftpLogin() { boolean isLogined = false; try { log.debug("ftp login start ..."); int repeatTime = ftpUseBean.getRepeatTime(); for (int i = 0; i < repeatTime; i++) { super.connect(ftpUseBean.getHost(), ftpUseBean.getPort()); isLogined = super.login(ftpUseBean.getUserName(), ftpUseBean.getPassword()); if (isLogined) break; } if(isLogined) log.debug("ftp login successfully ..."); else log.debug("ftp login failed ..."); return isLogined; } catch (SocketException e) { log.error("", e); return false; } catch (IOException e) { log.error("", e); return false; } catch (RuntimeException e) { log.error("", e); return false; } } public void setFtpToUtf8() throws IOException { FTPClientConfig conf = new FTPClientConfig(); super.configure(conf); super.setFileType(FTP.IMAGE_FILE_TYPE); int reply = super.sendCommand("OPTS UTF8 ON"); if (reply == 200) { // UTF8 Command super.setControlEncoding("UTF-8"); } } public void close() { if (super.isConnected()) { try { super.logout(); super.disconnect(); log.debug("ftp logout ...."); } catch (Exception e) { log.error(e.getMessage()); throw new RuntimeException(e.toString()); } } } public void uploadFileToFtpByIS(InputStream inputStream, String fileName) throws IOException { super.storeFile(ftpUseBean.getFtpPath()+fileName, inputStream); } public File downFtpFile(String fileName, String localFileName) throws IOException { File outfile = new File(localFileName); OutputStream oStream = null; try { oStream = new FileOutputStream(outfile); super.retrieveFile(ftpUseBean.getFtpPath()+fileName, oStream); return outfile; } finally { if (oStream != null) oStream.close(); } } public FTPFile[] listFtpFiles() throws IOException { return super.listFiles(ftpUseBean.getFtpPath()); } public void deleteFtpFiles(FTPFile[] ftpFiles) throws IOException { String path = ftpUseBean.getFtpPath(); for (FTPFile ff : ftpFiles) { if (ff.isFile()) { if (!super.deleteFile(path + ff.getName())) throw new RuntimeException("delete File" + ff.getName() + " is n't seccess"); } } } public void deleteFtpFile(String fileName) throws IOException { if (!super.deleteFile(ftpUseBean.getFtpPath() +fileName)) throw new RuntimeException("delete File" + ftpUseBean.getFtpPath() +fileName + " is n't seccess"); } public InputStream downFtpFile(String fileName) throws IOException { return super.retrieveFileStream(ftpUseBean.getFtpPath()+fileName); } /** * * @return * @return StringBuffer * @description 下載ftp服務器上的文件,addr為帶用戶名和密碼的URL */ public StringBuffer downloadBufferByURL(String addr) { BufferedReader in = null; try { URL url = new URL(addr); URLConnection conn = url.openConnection(); in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; StringBuffer ret = new StringBuffer(); while ((line = in.readLine()) != null) ret.append(line); return ret; } catch (Exception e) { log.error(e); return null; } finally { try { if (null != in) in.close(); } catch (IOException e) { e.printStackTrace(); log.error(e); } } } /** * * @return * @return byte[] * @description 下載ftp服務器上的文件,addr為帶用戶名和密碼的URL */ public byte[] downloadByteByURL(String addr) { FTPClient ftp = null; try { URL url = new URL(addr); int port = url.getPort()!=-1?url.getPort():21; log.info("HOST:"+url.getHost()); log.info("Port:"+port); log.info("USERINFO:"+url.getUserInfo()); log.info("PATH:"+url.getPath()); ftp = new FTPClient(); ftp.setDataTimeout(30000); ftp.setDefaultTimeout(30000); ftp.setReaderThread(false); ftp.connect(url.getHost(), port); ftp.login(url.getUserInfo().split(":")[0], url.getUserInfo().split(":")[1]); FTPClientConfig conf = new FTPClientConfig("UNIX"); ftp.configure(conf); log.info(ftp.getReplyString()); ftp.enterLocalPassiveMode(); //ftp.enterRemotePassiveMode() ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); int reply = ftp.sendCommand("OPTS UTF8 ON");// try to log.debug("alter to utf-8 encoding - reply:" + reply); if (reply == 200) { // UTF8 Command ftp.setControlEncoding("UTF-8"); } ftp.setFileType(FTPClient.BINARY_FILE_TYPE); log.info(ftp.getReplyString()); ByteArrayOutputStream out=new ByteArrayOutputStream(); DataOutputStream o=new DataOutputStream(out); String remotePath = url.getPath(); /** * Fixed:if doen't remove the first "/" at the head of url, * the file can't be retrieved. */ if(remotePath.indexOf("/")==0) { remotePath = url.getPath().replaceFirst("/", ""); } ftp.retrieveFile(remotePath, o); byte[] ret = out.toByteArray(); o.close(); String filepath = url.getPath(); ftp.changeWorkingDirectory(filepath.substring(0,filepath.lastIndexOf("/"))); files = ftp.listFiles(); return ret; } catch (Exception ex) { log.error("Failed to download file from ["+addr+"]!"+ex); } finally { try { if (null!=ftp) ftp.disconnect(); } catch (Exception e) { // } } return null; // StringBuffer buffer = downloadBufferByURL(addr); // return null == buffer ? null : buffer.toString().getBytes(); } public FTPFile[] getFiles() { return files; } public void setFiles(FTPFile[] files) { this.files = files; } // public static void getftpfilesize(String addr){ // // FTPClient ftp = null; // // try { // // URL url = new URL(addr); // // int port = url.getPort()!=-1?url.getPort():21; // log.info("HOST:"+url.getHost()); // log.info("Port:"+port); // log.info("USERINFO:"+url.getUserInfo()); // log.info("PATH:"+url.getPath()); // // ftp = new FTPClient(); // // ftp.setDataTimeout(30000); // ftp.setDefaultTimeout(30000); // ftp.setReaderThread(false); // ftp.connect(url.getHost(), port); // ftp.login(url.getUserInfo().split(":")[0], url.getUserInfo().split(":")[1]); // FTPClientConfig conf = new FTPClientConfig("UNIX"); // ftp.configure(conf); // log.info(ftp.getReplyString()); // // ftp.enterLocalPassiveMode(); //ftp.enterRemotePassiveMode() // ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); // // int reply = ftp.sendCommand("OPTS UTF8 ON");// try to // // log.debug("alter to utf-8 encoding - reply:" + reply); // if (reply == 200) { // UTF8 Command // ftp.setControlEncoding("UTF-8"); // } // ftp.setFileType(FTPClient.BINARY_FILE_TYPE); // ftp.changeWorkingDirectory(url.getPath()); // FTPFile[] files = ftp.listFiles(); // for (FTPFile flie : files){ // System.out.println(new String(flie.getName().getBytes("gbk"),"ISO8859-1")); // System.out.println(flie.getSize()); // } // // // } catch (Exception ex) { // log.error("Failed to download file from ["+addr+"]!"+ex); // } finally { // try {<pre class="java" name="code"> if (null!=ftp) // ftp.disconnect(); // } catch (Exception e) { } } } }
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。