package com.voicecyber.thailandsubway.ftp; import com.voicecyber.thailandsubway.utils.ApplicationConstants; import com.voicecyber.thailandsubway.utils.SystemConfig; import com.voicecyber.thailandsubway.utils.XmlUtils; import org.apache.commons.net.ftp.FTPClient; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.List; import javax.swing.JFileChooser; import javax.swing.SwingUtilities; import javax.swing.UIManager; /** * @Author: YafengLiang * @Description: eTRA 东方通讯录音服务器 * @Date: Created in 16:40 2018/12/5 */ public class FtpTest { private static final Logger logger = LoggerFactory.getLogger(FtpTest.class); static FTPClient ftpClient; public static void main(String[] args) throws IOException { String rootFile = SystemConfig.FileLocation.baseLocation+ ApplicationConstants.FileName.THAILAND_SUBWAY; Element rootElement = XmlUtils.getRootNode(rootFile); List<Element> list = XmlUtils.getChildElements(rootElement,"ftp"); String id1 = "1"; if (list.size()>0){ for (Element element : list) { String ids = element.attributeValue("id"); if (id1.equals(ids)){ String HOST = element.attributeValue("ip"); int PORT = Integer.valueOf(element.attributeValue("port")); String USERNAME = element.attributeValue("username"); String PASSWORD = element.attributeValue("password"); login(HOST,PORT,USERNAME,PASSWORD); MyRun myRun = new MyRun(); new Thread(myRun).start(); } } } } /** * 登录 * @throws IOException */ static void login(String HOST,int PORT,String USERNAME,String PASSWORD) throws IOException { ftpClient = new FTPClient(); ftpClient.connect(HOST, PORT); ftpClient.login(USERNAME, PASSWORD); logger.info("登录成功"); //设置编码 ftpClient.setControlEncoding("UTF-8"); ftpClient.setBufferSize(8096); } /** * 判断给定的路径是文件还是文件夹 * * @param path * @return * @throws IOException */ static boolean isDirectory(String path) throws IOException { //如果是文件,就会返回false //如果文件夹或文件名中含有中文,这里要转换一下,不然会返回false return ftpClient.changeWorkingDirectory(new String(path.getBytes(), "UTF-8")); } /** * 判断本地路径是否存在,不存在就创建路径 * * @param path */ static void makeDirs(String path) { String rootFile = SystemConfig.FileLocation.baseLocation+ ApplicationConstants.FileName.THAILAND_SUBWAY; Element rootElement = XmlUtils.getRootNode(rootFile); List<Element> list = XmlUtils.getChildElements(rootElement,"ftp"); String id1 = "1"; if (list.size()>0){ for (Element element : list) { String ids = element.attributeValue("id"); if (id1.equals(ids)){ String LOCAL_DIRECTORY = element.attributeValue("localPath"); File localFile = new File(LOCAL_DIRECTORY + path); if (!localFile.exists()) { localFile.mkdirs(); logger.info("名称:"+localFile+"目录已创建完成"); } } } } } /** * 下载单个文件 * * @param dir * @throws IOException */ static void downloadFile(String dir) throws IOException { String rootFile = SystemConfig.FileLocation.baseLocation+ ApplicationConstants.FileName.THAILAND_SUBWAY; Element rootElement = XmlUtils.getRootNode(rootFile); List<Element> list = XmlUtils.getChildElements(rootElement,"ftp"); String id1 = "1"; if (list.size()>0){ for (Element element : list) { String ids = element.attributeValue("id"); if (id1.equals(ids)){ String LOCAL_DIRECTORY = element.attributeValue("localPath"); File file = new File(LOCAL_DIRECTORY + dir); OutputStream os = new FileOutputStream(file); ftpClient.setControlEncoding("GBK"); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); //如果文件名中含有中文,retrieveFile文件时会找不到FTP上的文件,导致保存在本地的是一个空文件,所以也要转换一下 ftpClient.retrieveFile(new String(file.getName().getBytes(), "UTF-8"), os); logger.info("下载 "+file.getName()+" 完成"); os.close(); } } } } /** * 下载任务,递归调用,循环下载所有目录下的文件 * * @param path * @throws IOException */ static void doDownload(String path) throws IOException { //创建本地目录 makeDirs(path); //切换工作目录 ftpClient.changeWorkingDirectory(new String(path.getBytes(), "UTF-8")); //获取目录下的文件列表 String[] fileNames = ftpClient.listNames(); //循环下载FTP目录下的文件 for (String fname : fileNames) { if (isDirectory(path + "/" + fname)) { //递归调用 doDownload(path + "/" + fname); } else { //下载单个文件 downloadFile(path + "/" + fname); ftpClient.deleteFile(path + "/" + fname); logger.info("删除:"+fname+" 成功"); } } } /** * 实时同步ftp目录文件到本地 */ public static class MyRun implements Runnable { @Override public void run() { while (true) { try { logger.info("十秒后开始。。。。。。"); Thread.sleep(10 * 1000); logger.info("继续。。。。。。"); doDownload("/"); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } } /** * FTP上传文件 */ public static void testUpload() { FTPClient ftpClient = new FTPClient(); FileInputStream fis = null; try { ftpClient.connect("172.20.16.76", 9500); ftpClient.login("lyc", "123456"); JFileChooser fd = new JFileChooser(); try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception e) { e.printStackTrace(); } SwingUtilities.updateComponentTreeUI(fd); fd.showOpenDialog(null); File srcFile = fd.getSelectedFile(); //if(srcFile != null){} fis = new FileInputStream(srcFile); //设置上传目录 ftpClient.changeWorkingDirectory("/img"); //ftpClient.setBufferSize(1024); ftpClient.setControlEncoding("GBK"); //设置文件类型(二进制) ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.storeFile(srcFile.getName(), fis); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("FTP客户端出错!", e); } finally { try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("关闭FTP连接发生异常!", e); } } } }

598381336 LV1
2024年3月29日
一蓑烟雨 LV11
2021年4月2日
lironggang LV38
2021年2月5日
guaixia163 LV13
2020年11月11日
ChenTong_ZuiDaiMa LV2
2020年10月2日
lyd19931203 LV21
2020年6月2日
15838634741 LV18
2020年4月2日
qq652133917 LV1
2020年1月11日
寒江无月 LV1
2019年11月7日
南风你好吗 LV5
2019年9月30日