| | |
| | | package com.whyc.dto; |
| | | |
| | | import com.enterprisedt.net.ftp.*; |
| | | import org.apache.commons.lang.StringUtils; |
| | | |
| | | import java.io.*; |
| | | import java.text.ParseException; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | |
| | | public class FtpHelper { |
| | | private FTPClient ftp; |
| | | |
| | | /** |
| | | * 初始化Ftp信息 |
| | | * |
| | | * @param ftpServer ftp服务器地址 |
| | | * @param ftpPort Ftp端口号 |
| | | * @param ftpUsername ftp 用户名 |
| | | * @param ftpPassword ftp 密码 |
| | | */ |
| | | public FtpHelper(String ftpServer, int ftpPort, String ftpUsername, |
| | | String ftpPassword) { |
| | | connect(ftpServer, ftpPort, ftpUsername, ftpPassword); |
| | | } |
| | | |
| | | /** |
| | | * 连接到ftp |
| | | * |
| | | * @param ftpServer ftp服务器地址 |
| | | * @param ftpPort Ftp端口号 |
| | | * @param ftpUsername ftp 用户名 |
| | | * @param ftpPassword ftp 密码 |
| | | */ |
| | | public void connect(String ftpServer, int ftpPort, String ftpUsername, String ftpPassword) { |
| | | ftp = new FTPClient(); |
| | | try { |
| | | ftp.setControlEncoding("GBK"); |
| | | ftp.setRemoteHost(ftpServer); |
| | | ftp.setRemotePort(ftpPort); |
| | | ftp.setTimeout(1000*60*60*12); |
| | | ftp.setConnectMode(FTPConnectMode.ACTIVE); |
| | | ftp.connect(); |
| | | ftp.login(ftpUsername, ftpPassword); |
| | | ftp.setType(FTPTransferType.BINARY); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | ftp = null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 更改ftp路径 |
| | | * |
| | | * @param ftp |
| | | * @param dirName |
| | | * @return |
| | | */ |
| | | public boolean checkDirectory(FTPClient ftp, String dirName) { |
| | | boolean flag; |
| | | try { |
| | | ftp.chdir(dirName); |
| | | flag = true; |
| | | } catch (Exception e) { |
| | | //e.printStackTrace(); |
| | | flag = false; |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * 断开ftp链接 |
| | | */ |
| | | public void disconnect() { |
| | | try { |
| | | if (ftp.connected()) { |
| | | ftp.quit(); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 读取ftp文件流 |
| | | * |
| | | * @param filePath ftp文件路径 |
| | | * @return s |
| | | * @throws Exception |
| | | */ |
| | | public InputStream downloadFile(String filePath) throws Exception { |
| | | InputStream inputStream = null; |
| | | String fileName = ""; |
| | | filePath = StringUtils.removeStart(filePath, "/"); |
| | | int len = filePath.lastIndexOf("/"); |
| | | if (len == -1) { |
| | | if (filePath.length() > 0) { |
| | | fileName = filePath; |
| | | } else { |
| | | throw new Exception("没有输入文件路径"); |
| | | } |
| | | } else { |
| | | fileName = filePath.substring(len + 1); |
| | | |
| | | String type = filePath.substring(0, len); |
| | | String[] typeArray = type.split("/"); |
| | | for (String s : typeArray) { |
| | | ftp.chdir(s); |
| | | } |
| | | } |
| | | byte[] data; |
| | | try { |
| | | data = ftp.get(fileName); |
| | | inputStream = new ByteArrayInputStream(data); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return inputStream; |
| | | } |
| | | |
| | | /** |
| | | * 上传文件到ftp |
| | | * |
| | | * @param file 文件对象 |
| | | * @param filePath 上传的路径 |
| | | * @throws Exception |
| | | */ |
| | | public void uploadFile(File file, String filePath) throws Exception { |
| | | InputStream inStream = new FileInputStream(file); |
| | | uploadFile(inStream, filePath); |
| | | } |
| | | |
| | | /** |
| | | * 上传文件到ftp |
| | | * |
| | | * @param inStream 上传的文件流 |
| | | * @param filePath 上传路径 |
| | | * @throws Exception |
| | | */ |
| | | public void uploadFile(InputStream inStream, String filePath) |
| | | throws Exception { |
| | | if (inStream == null) { |
| | | return; |
| | | } |
| | | String fileName = ""; |
| | | filePath = StringUtils.removeStart(filePath, "/"); |
| | | int len = filePath.lastIndexOf("/"); |
| | | if (len == -1) { |
| | | if (filePath.length() > 0) { |
| | | fileName = filePath; |
| | | } else { |
| | | throw new Exception("没有输入文件路径"); |
| | | } |
| | | } else { |
| | | fileName = filePath.substring(len + 1); |
| | | String type = filePath.substring(0, len); |
| | | String[] typeArray = type.split("/"); |
| | | for (String s : typeArray) { |
| | | s.trim(); |
| | | if (!checkDirectory(ftp, s)) { |
| | | if(!ftp.existsDirectory(s)) { |
| | | ftp.mkdir(s); |
| | | } |
| | | changeDirectory(s); |
| | | } |
| | | } |
| | | } |
| | | ftp.put(inStream, fileName); |
| | | changeDirectory("/"); |
| | | } |
| | | |
| | | public void uploadFile2(File inFile,String fileName) throws IOException, FTPException { |
| | | InputStream inStream = new FileInputStream(inFile); |
| | | ftp.put(inStream, fileName); |
| | | } |
| | | |
| | | /** |
| | | * 删除ftp文件 |
| | | * |
| | | * @param filePath 文件路径 |
| | | * @throws Exception |
| | | */ |
| | | public void deleteFile(String filePath) throws Exception { |
| | | String fileName = ""; |
| | | filePath = StringUtils.removeStart(filePath, "/"); |
| | | int len = filePath.lastIndexOf("/"); |
| | | if (len == -1) { |
| | | if (filePath.length() > 0) { |
| | | fileName = filePath; |
| | | } else { |
| | | throw new Exception("没有输入文件路径"); |
| | | } |
| | | } else { |
| | | fileName = filePath.substring(len + 1); |
| | | |
| | | String type = filePath.substring(0, len); |
| | | String[] typeArray = type.split("/"); |
| | | for (String s : typeArray) { |
| | | if (checkDirectory(ftp, s)) { |
| | | ftp.chdir(s); |
| | | } |
| | | } |
| | | } |
| | | ftp.delete(fileName); |
| | | } |
| | | |
| | | |
| | | //切换目录 |
| | | public void changeDirectory(String path) { |
| | | if (!StringUtils.isEmpty(path)) { |
| | | try { |
| | | ftp.chdir(path); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //读取文件列表 |
| | | public List<File> getFileList(String path) { |
| | | List<File> rsList = new ArrayList<>(); |
| | | if (path == null || path.equals("")) { |
| | | return rsList; |
| | | } |
| | | File file = new File(path); |
| | | if (!file.exists()) { |
| | | return rsList; |
| | | } |
| | | // 处理文件 |
| | | if (file.isFile()) { |
| | | rsList.add(file); |
| | | return rsList; |
| | | } |
| | | // 处理文件夹 |
| | | if (null == file.listFiles()) { |
| | | rsList.add(file); |
| | | return rsList; |
| | | } |
| | | LinkedList<File> forDealList = new LinkedList<>(); |
| | | forDealList.addAll(Arrays.asList(file.listFiles())); |
| | | while (!forDealList.isEmpty()) { |
| | | File firstFile = forDealList.removeFirst(); |
| | | // 处理文件 |
| | | if (firstFile.isFile()) { |
| | | // 把文件自身先加入结果 |
| | | rsList.add(firstFile); |
| | | continue; |
| | | } |
| | | // 处理文件夹 |
| | | File[] files = firstFile.listFiles(); |
| | | if (files == null) { |
| | | continue; |
| | | } |
| | | for (File curr : files) { |
| | | if (curr.isDirectory()) { |
| | | // 将此文件夹放入待处理列表 |
| | | forDealList.add(curr); |
| | | } else { |
| | | rsList.add(curr); |
| | | } |
| | | } |
| | | } |
| | | return rsList; |
| | | } |
| | | |
| | | public void deleteDir(String dirName) throws IOException, FTPException, ParseException { |
| | | FTPClient client = ftp; |
| | | |
| | | //String[] dir = client.dir(dirName, true); |
| | | FTPFile[] ftpFiles = client.dirDetails(dirName); |
| | | for (FTPFile ftpFile : ftpFiles) { |
| | | if(ftpFile.isDir()){ |
| | | deleteDir(dirName+"/"+ftpFile.getName()); |
| | | }else{ |
| | | client.delete(dirName+"/"+ftpFile.getName()); |
| | | } |
| | | } |
| | | /*for (String subDirName : dir) { |
| | | String name = subDirName.substring(subDirName.lastIndexOf(" ") + 1); |
| | | if(subDirName.contains("<DIR>")){ //文件夹 |
| | | //name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK"); |
| | | deleteDir(dirName+"/"+name); |
| | | //client.rmdir(dirName+"/"+name); |
| | | }else{ |
| | | //name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK"); |
| | | client.delete(dirName+"/"+name); |
| | | } |
| | | }*/ |
| | | client.rmdir(dirName); |
| | | } |
| | | |
| | | public String[] getDirList() throws IOException, FTPException { |
| | | return ftp.dir(); |
| | | } |
| | | |
| | | public void mkdir(String dirPath) throws IOException, FTPException { |
| | | ftp.mkdir(dirPath); |
| | | } |
| | | } |
| | | //package com.whyc.dto; |
| | | // |
| | | //import com.enterprisedt.net.ftp.*; |
| | | //import org.apache.commons.lang.StringUtils; |
| | | // |
| | | //import java.io.*; |
| | | //import java.text.ParseException; |
| | | //import java.util.ArrayList; |
| | | //import java.util.Arrays; |
| | | //import java.util.LinkedList; |
| | | //import java.util.List; |
| | | // |
| | | //public class FtpHelper { |
| | | // private FTPClient ftp; |
| | | // |
| | | // /** |
| | | // * 初始化Ftp信息 |
| | | // * |
| | | // * @param ftpServer ftp服务器地址 |
| | | // * @param ftpPort Ftp端口号 |
| | | // * @param ftpUsername ftp 用户名 |
| | | // * @param ftpPassword ftp 密码 |
| | | // */ |
| | | // public FtpHelper(String ftpServer, int ftpPort, String ftpUsername, |
| | | // String ftpPassword) { |
| | | // connect(ftpServer, ftpPort, ftpUsername, ftpPassword); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 连接到ftp |
| | | // * |
| | | // * @param ftpServer ftp服务器地址 |
| | | // * @param ftpPort Ftp端口号 |
| | | // * @param ftpUsername ftp 用户名 |
| | | // * @param ftpPassword ftp 密码 |
| | | // */ |
| | | // public void connect(String ftpServer, int ftpPort, String ftpUsername, String ftpPassword) { |
| | | // ftp = new FTPClient(); |
| | | // try { |
| | | // ftp.setControlEncoding("GBK"); |
| | | // ftp.setRemoteHost(ftpServer); |
| | | // ftp.setRemotePort(ftpPort); |
| | | // ftp.setTimeout(1000*60*60*12); |
| | | // ftp.setConnectMode(FTPConnectMode.ACTIVE); |
| | | // ftp.connect(); |
| | | // ftp.login(ftpUsername, ftpPassword); |
| | | // ftp.setType(FTPTransferType.BINARY); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // ftp = null; |
| | | // } |
| | | // } |
| | | // |
| | | // /** |
| | | // * 更改ftp路径 |
| | | // * |
| | | // * @param ftp |
| | | // * @param dirName |
| | | // * @return |
| | | // */ |
| | | // public boolean checkDirectory(FTPClient ftp, String dirName) { |
| | | // boolean flag; |
| | | // try { |
| | | // ftp.chdir(dirName); |
| | | // flag = true; |
| | | // } catch (Exception e) { |
| | | // //e.printStackTrace(); |
| | | // flag = false; |
| | | // } |
| | | // return flag; |
| | | // } |
| | | // |
| | | // /** |
| | | // * 断开ftp链接 |
| | | // */ |
| | | // public void disconnect() { |
| | | // try { |
| | | // if (ftp.connected()) { |
| | | // ftp.quit(); |
| | | // } |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // |
| | | // /** |
| | | // * 读取ftp文件流 |
| | | // * |
| | | // * @param filePath ftp文件路径 |
| | | // * @return s |
| | | // * @throws Exception |
| | | // */ |
| | | // public InputStream downloadFile(String filePath) throws Exception { |
| | | // InputStream inputStream = null; |
| | | // String fileName = ""; |
| | | // filePath = StringUtils.removeStart(filePath, "/"); |
| | | // int len = filePath.lastIndexOf("/"); |
| | | // if (len == -1) { |
| | | // if (filePath.length() > 0) { |
| | | // fileName = filePath; |
| | | // } else { |
| | | // throw new Exception("没有输入文件路径"); |
| | | // } |
| | | // } else { |
| | | // fileName = filePath.substring(len + 1); |
| | | // |
| | | // String type = filePath.substring(0, len); |
| | | // String[] typeArray = type.split("/"); |
| | | // for (String s : typeArray) { |
| | | // ftp.chdir(s); |
| | | // } |
| | | // } |
| | | // byte[] data; |
| | | // try { |
| | | // data = ftp.get(fileName); |
| | | // inputStream = new ByteArrayInputStream(data); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // return inputStream; |
| | | // } |
| | | // |
| | | // /** |
| | | // * 上传文件到ftp |
| | | // * |
| | | // * @param file 文件对象 |
| | | // * @param filePath 上传的路径 |
| | | // * @throws Exception |
| | | // */ |
| | | // public void uploadFile(File file, String filePath) throws Exception { |
| | | // InputStream inStream = new FileInputStream(file); |
| | | // uploadFile(inStream, filePath); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 上传文件到ftp |
| | | // * |
| | | // * @param inStream 上传的文件流 |
| | | // * @param filePath 上传路径 |
| | | // * @throws Exception |
| | | // */ |
| | | // public void uploadFile(InputStream inStream, String filePath) |
| | | // throws Exception { |
| | | // if (inStream == null) { |
| | | // return; |
| | | // } |
| | | // String fileName = ""; |
| | | // filePath = StringUtils.removeStart(filePath, "/"); |
| | | // int len = filePath.lastIndexOf("/"); |
| | | // if (len == -1) { |
| | | // if (filePath.length() > 0) { |
| | | // fileName = filePath; |
| | | // } else { |
| | | // throw new Exception("没有输入文件路径"); |
| | | // } |
| | | // } else { |
| | | // fileName = filePath.substring(len + 1); |
| | | // String type = filePath.substring(0, len); |
| | | // String[] typeArray = type.split("/"); |
| | | // for (String s : typeArray) { |
| | | // s.trim(); |
| | | // if (!checkDirectory(ftp, s)) { |
| | | // if(!ftp.existsDirectory(s)) { |
| | | // ftp.mkdir(s); |
| | | // } |
| | | // changeDirectory(s); |
| | | // } |
| | | // } |
| | | // } |
| | | // ftp.put(inStream, fileName); |
| | | // changeDirectory("/"); |
| | | // } |
| | | // |
| | | // public void uploadFile2(File inFile,String fileName) throws IOException, FTPException { |
| | | // InputStream inStream = new FileInputStream(inFile); |
| | | // ftp.put(inStream, fileName); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 删除ftp文件 |
| | | // * |
| | | // * @param filePath 文件路径 |
| | | // * @throws Exception |
| | | // */ |
| | | // public void deleteFile(String filePath) throws Exception { |
| | | // String fileName = ""; |
| | | // filePath = StringUtils.removeStart(filePath, "/"); |
| | | // int len = filePath.lastIndexOf("/"); |
| | | // if (len == -1) { |
| | | // if (filePath.length() > 0) { |
| | | // fileName = filePath; |
| | | // } else { |
| | | // throw new Exception("没有输入文件路径"); |
| | | // } |
| | | // } else { |
| | | // fileName = filePath.substring(len + 1); |
| | | // |
| | | // String type = filePath.substring(0, len); |
| | | // String[] typeArray = type.split("/"); |
| | | // for (String s : typeArray) { |
| | | // if (checkDirectory(ftp, s)) { |
| | | // ftp.chdir(s); |
| | | // } |
| | | // } |
| | | // } |
| | | // ftp.delete(fileName); |
| | | // } |
| | | // |
| | | // |
| | | // //切换目录 |
| | | // public void changeDirectory(String path) { |
| | | // if (!StringUtils.isEmpty(path)) { |
| | | // try { |
| | | // ftp.chdir(path); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // } |
| | | // |
| | | // //读取文件列表 |
| | | // public List<File> getFileList(String path) { |
| | | // List<File> rsList = new ArrayList<>(); |
| | | // if (path == null || path.equals("")) { |
| | | // return rsList; |
| | | // } |
| | | // File file = new File(path); |
| | | // if (!file.exists()) { |
| | | // return rsList; |
| | | // } |
| | | // // 处理文件 |
| | | // if (file.isFile()) { |
| | | // rsList.add(file); |
| | | // return rsList; |
| | | // } |
| | | // // 处理文件夹 |
| | | // if (null == file.listFiles()) { |
| | | // rsList.add(file); |
| | | // return rsList; |
| | | // } |
| | | // LinkedList<File> forDealList = new LinkedList<>(); |
| | | // forDealList.addAll(Arrays.asList(file.listFiles())); |
| | | // while (!forDealList.isEmpty()) { |
| | | // File firstFile = forDealList.removeFirst(); |
| | | // // 处理文件 |
| | | // if (firstFile.isFile()) { |
| | | // // 把文件自身先加入结果 |
| | | // rsList.add(firstFile); |
| | | // continue; |
| | | // } |
| | | // // 处理文件夹 |
| | | // File[] files = firstFile.listFiles(); |
| | | // if (files == null) { |
| | | // continue; |
| | | // } |
| | | // for (File curr : files) { |
| | | // if (curr.isDirectory()) { |
| | | // // 将此文件夹放入待处理列表 |
| | | // forDealList.add(curr); |
| | | // } else { |
| | | // rsList.add(curr); |
| | | // } |
| | | // } |
| | | // } |
| | | // return rsList; |
| | | // } |
| | | // |
| | | // public void deleteDir(String dirName) throws IOException, FTPException, ParseException { |
| | | // FTPClient client = ftp; |
| | | // |
| | | // //String[] dir = client.dir(dirName, true); |
| | | // FTPFile[] ftpFiles = client.dirDetails(dirName); |
| | | // for (FTPFile ftpFile : ftpFiles) { |
| | | // if(ftpFile.isDir()){ |
| | | // deleteDir(dirName+"/"+ftpFile.getName()); |
| | | // }else{ |
| | | // client.delete(dirName+"/"+ftpFile.getName()); |
| | | // } |
| | | // } |
| | | // /*for (String subDirName : dir) { |
| | | // String name = subDirName.substring(subDirName.lastIndexOf(" ") + 1); |
| | | // if(subDirName.contains("<DIR>")){ //文件夹 |
| | | // //name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK"); |
| | | // deleteDir(dirName+"/"+name); |
| | | // //client.rmdir(dirName+"/"+name); |
| | | // }else{ |
| | | // //name = new String(name.getBytes(StandardCharsets.ISO_8859_1),"GBK"); |
| | | // client.delete(dirName+"/"+name); |
| | | // } |
| | | // }*/ |
| | | // client.rmdir(dirName); |
| | | // } |
| | | // |
| | | // public String[] getDirList() throws IOException, FTPException { |
| | | // return ftp.dir(); |
| | | // } |
| | | // |
| | | // public void mkdir(String dirPath) throws IOException, FTPException { |
| | | // ftp.mkdir(dirPath); |
| | | // } |
| | | //} |