java实现ftp上传下载

来源:互联网 发布:java调用短信接口 编辑:程序博客网 时间:2024/04/29 18:58

代码如下

<span style="font-size:18px;">import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPListParseEngine; import org.apache.commons.net.ftp.FTPReply; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class FtpHelper { private FTPClient ftp = null; /**  * Ftp服务器  */ private String server; /**  * 用户名  */ private String uname; /**  * 密码  */ private String password; /**  * 连接端口,默认21  */ private int port = 21; private Document document ; public FtpHelper(String server, int port, String uname, String password){ this.server = server; if (this.port > 0){ this.port = port; } this.uname = uname; this.password = password; //初始化 ftp = new FTPClient(); } /**  * 连接FTP服务器  *   * @param server  * @param uname  * @param password  * @return  * @throws Exception  */ public FTPClient connectFTPServer() throws Exception { try { ftp.configure(getFTPClientConfig()); ftp.connect(this.server, this.port); if (!ftp.login(this.uname, this.password)) { ftp.logout(); ftp = null; return ftp; } // 文件类型,默认是ASCII ftp.setFileType(FTPClient.BINARY_FILE_TYPE); ftp.setControlEncoding("GBK"); // 设置被动模式 ftp.enterLocalPassiveMode(); //ftp.setConnectTimeout(2000); ftp.setBufferSize(1024); // 响应信息 int replyCode = ftp.getReplyCode(); if ((!FTPReply.isPositiveCompletion(replyCode))) { // 关闭Ftp连接 closeFTPClient(); // 释放空间 ftp = null; throw new Exception("登录FTP服务器失败,请检查![Server:" + server + "、" + "User:" + uname + "、" + "Password:" + password); } else { return ftp; } } catch (Exception e) { ftp.disconnect(); ftp = null; throw e; } } /**  * 配置FTP连接参数  *   * @return  * @throws Exception  */ public FTPClientConfig getFTPClientConfig() throws Exception { String systemKey = FTPClientConfig.SYST_NT; String serverLanguageCode = "zh"; FTPClientConfig conf = new FTPClientConfig(systemKey); conf.setServerLanguageCode(serverLanguageCode); conf.setDefaultDateFormatStr("yyyy-MM-dd"); return conf; } /**  * 向FTP根目录上传文件  *   * @param localFile  * @param newName  *            新文件名  * @throws Exception  */ public Boolean uploadFile(String localFile, String newName) throws Exception { InputStream input = null; boolean success = false; try { File file = null; if (checkFileExist(localFile)) { file = new File(localFile); } input = new FileInputStream(file); success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /**  * 向FTP根目录上传文件  *   * @param input  * @param newName  *            新文件名  * @throws Exception  */ public Boolean uploadFile(InputStream input, String newName) throws Exception { boolean success = false; try { success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /**  * 向FTP指定路径上传文件  *   * @param localFile  * @param newName  *            新文件名  * @param remoteFoldPath  * @throws Exception  */ public Boolean uploadFile(String localFile, String newName, String remoteFoldPath) throws Exception { InputStream input = null; boolean success = false; try { File file = null; if (checkFileExist(localFile)) { file = new File(localFile); } input = new FileInputStream(file); // 改变当前路径到指定路径 if (!this.changeDirectory(remoteFoldPath)) { System.out.println("服务器路径不存!"); return false; } success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /**  * 向FTP指定路径上传文件  *   * @param input  * @param newName  *            新文件名  * @param remoteFoldPath  * @throws Exception  */ public Boolean uploadFile(InputStream input, String newName, String remoteFoldPath) throws Exception { boolean success = false; try { // 改变当前路径到指定路径 if (!this.changeDirectory(remoteFoldPath)) { System.out.println("服务器路径不存!"); return false; } success = ftp.storeFile(newName, input); if (!success) { throw new Exception("文件上传失败!"); } } catch (Exception e) { throw e; } finally { if (input != null) { input.close(); } } return success; } /**  * 从FTP服务器下载文件  *   * @param remotePath  *            FTP路径(不包含文件名)  * @param fileName  *            下载文件名  * @param localPath  *            本地路径  */ public Boolean downloadFile(String remotePath, String fileName, String localPath) throws Exception { BufferedOutputStream output = null; boolean success = false; try { // 检查本地路径 this.checkFileExist(localPath); // 改变工作路径 if (!this.changeDirectory(remotePath)) { System.out.println("服务器路径不存在"); return false; } // 列出当前工作路径下的文件列表 List<FTPFile> fileList = this.getFileList(); if (fileList == null || fileList.size() == 0) { System.out.println("服务器当前路径下不存在文件!"); return success; } for (FTPFile ftpfile : fileList) { if (ftpfile.getName().equals(fileName)) { File localFilePath = new File(localPath + File.separator + ftpfile.getName()); output = new BufferedOutputStream(new FileOutputStream( localFilePath)); success = ftp.retrieveFile(ftpfile.getName(), output); } } if (!success) { throw new Exception("文件下载失败!"); } } catch (Exception e) { throw e; } finally { if (output != null) { output.close(); } } return success; } /**  * 从FTP服务器获取文件流  *   * @param remoteFilePath  * @return  * @throws Exception  */ public InputStream downloadFile(String remoteFilePath) throws Exception { return ftp.retrieveFileStream(remoteFilePath); } /**  * 获取FTP服务器上指定路径下的文件列表  *   * @param filePath  * @return  */ public List<FTPFile> getFtpServerFileList(String remotePath) throws Exception { FTPListParseEngine engine = ftp.initiateListParsing(remotePath); List<FTPFile> ftpfiles = Arrays.asList(engine.getNext(25)); return ftpfiles; } /**  * 获取FTP服务器上[指定路径]下的文件列表  *   * @param path  * @return  * @throws Exception  */ public List<FTPFile> getFileList(String remotePath) throws Exception { List<FTPFile> ftpfiles = Arrays.asList(ftp.listFiles(remotePath)); return ftpfiles; } /**  * 获取FTP服务器[当前工作路径]下的文件列表  *   * @param path  * @return  * @throws Exception  */ public List<FTPFile> getFileList() throws Exception { List<FTPFile> ftpfiles = Arrays.asList(ftp.listFiles()); return ftpfiles; } /**  * 改变FTP服务器工作路径   *   * @param remoteFoldPath  */ public Boolean changeDirectory(String remoteFoldPath) throws Exception { return ftp.changeWorkingDirectory(remoteFoldPath); } /**  * 删除文件  *   * @param remoteFilePath  * @return  * @throws Exception  */ public Boolean deleteFtpServerFile(String remoteFilePath) throws Exception { return ftp.deleteFile(remoteFilePath); } /**  * 创建目录  *   * @param remoteFoldPath  * @return  */ public boolean createFold(String remoteFoldPath) throws Exception { boolean flag = ftp.makeDirectory(remoteFoldPath); if (!flag) { throw new Exception("创建目录失败"); } return false; } /**  * 删除目录  * @param remoteFoldPath  * @return  * @throws Exception  */ public boolean deleteFold(String remoteFoldPath) throws Exception { return ftp.removeDirectory(remoteFoldPath) ; } /**  * 删除目录以及文件  *   * @param remoteFoldPath  * @return  */ public boolean deleteFoldAndsubFiles(String remoteFoldPath) throws Exception { boolean success = false; List<FTPFile> list = this.getFileList(remoteFoldPath); if (list == null || list.size() == 0) { return deleteFold(remoteFoldPath); } for (FTPFile ftpFile : list) { String name = ftpFile.getName(); if (ftpFile.isDirectory()) { success = deleteFoldAndsubFiles(remoteFoldPath + "/" + name); if (!success) break; } else { success = deleteFtpServerFile(remoteFoldPath + "/" + name); if (!success) break; } } if (!success) return false; success = deleteFold(remoteFoldPath); return success; } /**  * 检查本地路径是否存在  *   * @param filePath  * @return  * @throws Exception  */ public boolean checkFileExist(String filePath) throws Exception { boolean flag = false; File file = new File(filePath); if (!file.exists()) { throw new Exception("本地路径不存在,请检查!"); } else { flag = true; } return flag; } /**  * 创建XML文件  * @return  */ public Element getCurrentElement(){ document = DocumentHelper.createDocument(); return document.addElement("root"); } /**  * 生成目录XML文件  */ public void createDirectoryXML(String remotePath,Element fatherElement) throws Exception{ List<FTPFile> list = this.getFileList(); for(FTPFile ftpfile:list){ Element currentElement = fatherElement; //当前的目录节点 String newRemotePath = remotePath+ftpfile.getName(); if(ftpfile.isDirectory()){ Element dirElement = fatherElement.addElement("dir") ; dirElement.addAttribute("name",ftpfile.getName()); currentElement = dirElement; this.changeDirectory(newRemotePath); //从根目录开始 createDirectoryXML(newRemotePath,dirElement); }else{  Element fileElement = fatherElement.addElement("file");//文件节点  fileElement.setText(ftpfile.getName()) ; } } } /**  * 保存xml  */ public void saveXML(){ XMLWriter output = new XMLWriter();         //输出格式化         OutputFormat format = OutputFormat.createPrettyPrint();         try {             output = new XMLWriter(new FileWriter("src/com/shine/Ftp/config/dir.xml"), format);             output.write(this.document);             output.close();         } catch (IOException e) {             e.printStackTrace();         } } /**  * 关闭FTP连接  *   * @param ftp  * @throws Exception  */ public void closeFTPClient(FTPClient ftp) throws Exception { try { if (ftp.isConnected()) ftp.logout(); ftp.disconnect(); } catch (Exception e) { throw new Exception("关闭FTP服务出错!"); } } /**  * 关闭FTP连接  *   * @throws Exception  */ public void closeFTPClient() throws Exception { this.closeFTPClient(this.ftp); } /**  * Get Attribute Method  *   */ public FTPClient getFtp() { return ftp; } public String getServer() { return server; } public String getUname() { return uname; } public String getPassword() { return password; } public int getPort() { return port; } /**  * Set Attribute Method  *   */ public void setFtp(FTPClient ftp) { this.ftp = ftp; } public void setServer(String server) { this.server = server; } public void setUname(String uname) { this.uname = uname; } public void setPassword(String password) { this.password = password; } public void setPort(int port) { this.port = port; } /**  * 主方法(测试)  *   * 问题:上传时命名的新文件名不能有中文,否则上传失败.  *   * @param args  */ public static void main(String[] args) { try { FtpHelper fu = new FtpHelper("192.168.2.18", 21, "administrator","sunshine"); fu.connectFTPServer(); Element fatherElement = fu.getCurrentElement(); fu.createDirectoryXML("/", fatherElement); fu.saveXML(); } catch (Exception e) { System.out.println("异常信息:" + e.getMessage()); } } }</span>


注:详细信息尽在java教程网

1 0
原创粉丝点击