package com.xue; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class MyTextUtil { public static String ascii2string(String oldText) { System.out.println(oldText); if (oldText == null || oldText.equals("")) { return ""; } String newText = null; Character character = (char) Integer.parseInt(oldText.trim()); newText = character.toString(); return newText; } public static String hex2int(String oldNumber) { if (oldNumber == null || oldNumber.equals("")) { return ""; } return Integer.valueOf(oldNumber, 16).toString(); } public static String hexSequense2String(String sequence, String spilitChar) { StringBuffer result = new StringBuffer(""); String[] split = sequence.split(spilitChar); for (String string : split) { System.out.println(string); result.append(ascii2string(hex2int(string))); } return result.toString(); } public static String getStringFromString(String src,String regex,int groupAt){ Pattern pattern = Pattern.compile(regex); Matcher matcher =pattern.matcher(src); boolean matches = matcher.find(); if (matches) { String group = matcher.group(groupAt); return group; }else { throw new RuntimeException(); } } public static String[] getStringFromString(String src,String regex,int[] groupAt){ String[] result=new String[groupAt.length]; Pattern pattern = Pattern.compile(regex); Matcher matcher =pattern.matcher(src); boolean matches = matcher.find(); if (matches) { for (int i = 0; i < groupAt.length; i++) { String group = matcher.group(groupAt[i]); result[i]=group; } return result; }else { throw new RuntimeException(); } } public static String[] getStringFromString(String src,String regex,int[] groupAt, Pattern pattern){ String[] result=new String[groupAt.length]; Matcher matcher =pattern.matcher(src); boolean matches = matcher.find(); if (matches) { for (int i = 0; i < groupAt.length; i++) { String group = matcher.group(groupAt[i]); result[i]=group; } return result; }else { throw new RuntimeException(); } } public static String getTextFromFile(File file) throws UnsupportedEncodingException { try { return getTextFromFile(new FileInputStream(file)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static String getTextFromFile(InputStream inputStream) throws UnsupportedEncodingException { StringBuffer buffer=new StringBuffer(); Scanner scanner=new Scanner(inputStream); while (scanner.hasNextLine()) { buffer.append(scanner.nextLine()+"\n"); } return new String(buffer.toString().getBytes(),"UTF-8"); } public static String getTextFromFile(File file,String CharSet) { FileInputStream fileInputStream; try { fileInputStream = new FileInputStream(file); byte[] b=new byte[1024]; byte[] B=new byte[0]; int read =-1; while ((read=fileInputStream.read(b))>-1) { int i=B.length; B=Arrays.copyOf(B, B.length+read); for(int j=0;j<read;j++){ B[i+j]=b[j]; } } return new String(B,CharSet); } catch (FileNotFoundException e) { System.out.println(file.getAbsolutePath()); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static String[] getArrayFromString(String bodyText, String oneDataRegex) { String[] strings=new String[]{}; java.util.List<String> list=new ArrayList<String>(); Pattern compile = Pattern.compile(oneDataRegex); Matcher matcher = compile.matcher(bodyText); while (matcher.find()) { String group = matcher.group(); list.add(group); } return list.toArray(strings); } }
package com.xue; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.SocketException; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import com.xue.FtpMain.Conf; public class FtpMain { private static Conf conf = null; /*** * 入口方法 该类的作用是利用FTPClient 实现将远程的文件下载到本地目录下, 而且是将远程的目录结构从跟目录开始重建 * 比如远程目录是/c/b/d.txt 本地存储根目录是/cd/f/ 则最终拷贝的目录是/cd/f/c/b/d.txt * * @param args * @throws SocketException * @throws IOException */ public static void main(String[] args) throws SocketException, IOException { conf = Conf.loadConf();// 加载配置文件 System.out.println(conf); FTPClient client = new FTPClient(); client.connect(conf.getHost(), 21); boolean login = client.login(conf.getUsername(), conf.getPass()); client.enterLocalPassiveMode();// 非常重要 设置成被动模式 String rootpath = conf.getRootPath(); client.changeWorkingDirectory(rootpath); // 递归远程目录的文件,实现递归式下载 digui(client, rootpath); client.disconnect(); } /*** * 递归远程目录,并根据配置实现符合条件的文件名的下载 * * @param client * @param rootpath * @throws IOException */ private static void digui(FTPClient client, String rootpath) throws IOException { client.changeWorkingDirectory(rootpath); FTPFile[] listFiles = client.listFiles(); for (FTPFile ftpFile : listFiles) { if (ftpFile.isDirectory()) { digui(client, rootpath + "/" + ftpFile.getName()); client.changeToParentDirectory();// 跳出当前目录 此处非常重要,否则会出现bug } else { String fileName = ftpFile.getName(); boolean matches = fileName.matches(conf.getFileameExp()); if (matches) { System.out.println("正在下载文件:" + rootpath + "/" + fileName); String filePath = conf.getDesPath() + "/" + rootpath + "/"; boolean exists = new File(filePath).exists(); if (!exists) { new File(filePath).mkdirs(); } File file = new File(filePath + fileName); client.retrieveFile(fileName, new FileOutputStream(file)); String replyString = client.getReplyString(); System.out.println(replyString); System.out.println("下载完成:" + file.getAbsolutePath()); } } } } /** * 配置加载类 * * @author bobo * */ static class Conf { private String host; private String username; private String pass; private String rootPath; private String soucrePath; private String desPath; private String fileameExp; private Map<String, String> confMap; public static Conf loadConf() { Conf result = new Conf(); Map<String, String> map = new HashMap<String, String>(); try { String textFromFile = MyTextUtil.getTextFromFile(new File("conf/conf.conf")); String[] split = textFromFile.split("\n"); for (String string : split) { if (string.startsWith("#")) { continue; } String[] split2 = string.split("="); map.put(split2[0], split2[1]); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } result.confMap = map; return result; } public String getHost() { return confMap.get("host"); } public String getUsername() { return confMap.get("username"); } public String getPass() { return confMap.get("pass"); } public String getRootPath() { return confMap.get("rootPath"); } public String getSoucrePath() { return confMap.get("soucrePath"); } public String getDesPath() { return confMap.get("desPath"); } public String getFileameExp() { return confMap.get("fileameExp"); } @Override public String toString() { // TODO Auto-generated method stub String result = super.toString(); ; result += "\n conf-info:\n"; Set<String> keySet = this.confMap.keySet(); for (String key : keySet) { String value = this.confMap.get(key); result += key + "\t" + value + "\n"; } return result; } } }
相关推荐
FTPClient 是一个基于 Java 的 FTP 客户端库,提供了丰富的 FTP 操作 API,例如上传、下载、删除文件等。然而,在高并发场景下,频繁创建和销毁 FTPClient 对象可能会对服务器造成很大的压力。 为了解决这个问题,...
9. **设计模式**:为了实现文件的遍历,可以使用迭代器模式或深度优先搜索(DFS)、广度优先搜索(BFS)策略。在Java中,`java.io.File`类可以用来处理文件和目录的遍历。 10. **多线程**:如果文件数量巨大,可以...
10. **继续上传/下载(根据文件名为ContinueFTP2.java推测)**:在实际应用中,可能会遇到网络中断或其他异常导致的传输中断,这时可以使用`FTPClient`的`abort()`方法停止当前传输,然后在稍后的时间点重新尝试。...
它允许用户从远程主机下载文件或向远程主机上传文件。在Java中,我们可以使用多种库来实现FTP功能。 2. **Java FTP库**:在描述中提到了`edtftpj.jar`,这是一个Java FTP客户端库,提供了一种简单的方式来处理FTP...
Apache的FTPClient.jar是Apache Commons Net库的一部分,用于在Java应用程序中实现FTP(文件传输协议)客户端功能。这个工具类提供了丰富的API,使得开发者能够轻松地与FTP服务器进行交互,执行上传、下载、删除文件...
在Java中实现FTP客户端功能,可以让你的程序与FTP服务器交互,执行上传、下载、删除等操作。下面将详细介绍如何使用Java来实现FTP客户端功能,并提供相关的知识点。 1. **Java FTP API**: Java标准库提供了一个名为...
"利用PSFTP工具实现文件上传详解.zip"这个资源提供了一种通过PSFTP工具进行文件上传的方法,同时也包含了一个使用Java编程语言实现文件上传下载的示例。下面我们将深入探讨这两个主题。 首先,PSFTP(PuTTY Secure ...
在Android开发中,FTP(File Transfer Protocol)客户端的实现是一个常见的需求,特别是在处理远程文件上传、下载或管理场景。Apache的ftpclient库为开发者提供了一个强大的工具,它允许我们在Android应用中实现FTP...
Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的...
在提供的`ServerToServerFTP.java`文件中,可能包含了使用FTPClient进行服务器间文件传输的具体实现,比如从一个FTP服务器下载文件,然后上传到另一个FTP服务器。具体实现可能包括上述提到的连接、身份验证、文件...
FTP基于TCP/IP协议族,使用控制连接和数据连接来实现文件传输。控制连接用于发送FTP命令和接收响应,而数据连接用于实际的数据传输。FTP协议支持两种模式:主动模式(PORT)和被动模式(PASV),这两种模式主要处理...
10. **自动化脚本**:对于经常性的文件替换任务,可以利用Filezilla的命令行接口(FTPCLient)编写脚本来实现自动化。 了解以上步骤后,你就可以高效且安全地使用Filezilla来执行服务器文件替换了。这在日常的...
综上所述,这个FTP上传工具利用Java编程语言,结合FTP库,实现了高效、安全的文件上传功能,尤其适合需要定期同步文件到多个FTP服务器的场景。通过良好的设计和合理的配置,它可以有效地提高文件管理效率。
【FTP TIME】是一个关于FTP(File Transfer Protocol)的专题,主要涉及在编程环境中如何处理FTP相关的操作,如文件上传、下载、时间戳同步等。在这个主题下,我们可以通过分析给出的三个Java源代码文件——IOCase....
FTP客户端Applet是一种基于Java的小程序,用于在Web浏览器中实现文件传输协议(FTP)的功能。这个技术结合了Java Applet的跨平台特性和FTP的文件传输能力,使得用户可以在网页上直接上传或下载文件,而无需安装额外...
10. **自动化脚本**:FTP模块可以用于编写自动化脚本,实现定期备份、同步文件等任务,提升工作效率。 "FTP模块.cls"可能是一个面向对象编程中的类文件,封装了上述的FTP操作。在Python中,我们可以使用ftplib库来...