`
xuelianbobo
  • 浏览: 174885 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java FTPClient 实现文件下载 主机间文件同步

阅读更多
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;
		}
	}
}

 

 

分享到:
评论

相关推荐

    Spring Boot整合FTPClient线程池的实现示例

    FTPClient 是一个基于 Java 的 FTP 客户端库,提供了丰富的 FTP 操作 API,例如上传、下载、删除文件等。然而,在高并发场景下,频繁创建和销毁 FTPClient 对象可能会对服务器造成很大的压力。 为了解决这个问题,...

    java实现ftp自动上传文件

    9. **设计模式**:为了实现文件的遍历,可以使用迭代器模式或深度优先搜索(DFS)、广度优先搜索(BFS)策略。在Java中,`java.io.File`类可以用来处理文件和目录的遍历。 10. **多线程**:如果文件数量巨大,可以...

    java多线程ftp 上传下载

    10. **继续上传/下载(根据文件名为ContinueFTP2.java推测)**:在实际应用中,可能会遇到网络中断或其他异常导致的传输中断,这时可以使用`FTPClient`的`abort()`方法停止当前传输,然后在稍后的时间点重新尝试。...

    java实现ftp上传jar包

    它允许用户从远程主机下载文件或向远程主机上传文件。在Java中,我们可以使用多种库来实现FTP功能。 2. **Java FTP库**:在描述中提到了`edtftpj.jar`,这是一个Java FTP客户端库,提供了一种简单的方式来处理FTP...

    Apache的FTPClient.jar

    Apache的FTPClient.jar是Apache Commons Net库的一部分,用于在Java应用程序中实现FTP(文件传输协议)客户端功能。这个工具类提供了丰富的API,使得开发者能够轻松地与FTP服务器进行交互,执行上传、下载、删除文件...

    JAVA 实现 FTP 客户端功能

    在Java中实现FTP客户端功能,可以让你的程序与FTP服务器交互,执行上传、下载、删除等操作。下面将详细介绍如何使用Java来实现FTP客户端功能,并提供相关的知识点。 1. **Java FTP API**: Java标准库提供了一个名为...

    利用PSFTP工具实现文件上传详解.zip

    "利用PSFTP工具实现文件上传详解.zip"这个资源提供了一种通过PSFTP工具进行文件上传的方法,同时也包含了一个使用Java编程语言实现文件上传下载的示例。下面我们将深入探讨这两个主题。 首先,PSFTP(PuTTY Secure ...

    android ftpclient实例

    在Android开发中,FTP(File Transfer Protocol)客户端的实现是一个常见的需求,特别是在处理远程文件上传、下载或管理场景。Apache的ftpclient库为开发者提供了一个强大的工具,它允许我们在Android应用中实现FTP...

    JAVA上百实例源码以及开源项目源代码

    Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP   Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的...

    利用apache的ftpclent实现FTP服务器之间互传

    在提供的`ServerToServerFTP.java`文件中,可能包含了使用FTPClient进行服务器间文件传输的具体实现,比如从一个FTP服务器下载文件,然后上传到另一个FTP服务器。具体实现可能包括上述提到的连接、身份验证、文件...

    商业编程-源码-ftp协议实现多线程断点续传.zip

    FTP基于TCP/IP协议族,使用控制连接和数据连接来实现文件传输。控制连接用于发送FTP命令和接收响应,而数据连接用于实际的数据传输。FTP协议支持两种模式:主动模式(PORT)和被动模式(PASV),这两种模式主要处理...

    Filezilla 服务器文件替换

    10. **自动化脚本**:对于经常性的文件替换任务,可以利用Filezilla的命令行接口(FTPCLient)编写脚本来实现自动化。 了解以上步骤后,你就可以高效且安全地使用Filezilla来执行服务器文件替换了。这在日常的...

    ftp上传工具, 上传ftp服务器

    综上所述,这个FTP上传工具利用Java编程语言,结合FTP库,实现了高效、安全的文件上传功能,尤其适合需要定期同步文件到多个FTP服务器的场景。通过良好的设计和合理的配置,它可以有效地提高文件管理效率。

    FTP TIME

    【FTP TIME】是一个关于FTP(File Transfer Protocol)的专题,主要涉及在编程环境中如何处理FTP相关的操作,如文件上传、下载、时间戳同步等。在这个主题下,我们可以通过分析给出的三个Java源代码文件——IOCase....

    ftp client applet

    FTP客户端Applet是一种基于Java的小程序,用于在Web浏览器中实现文件传输协议(FTP)的功能。这个技术结合了Java Applet的跨平台特性和FTP的文件传输能力,使得用户可以在网页上直接上传或下载文件,而无需安装额外...

    FTP模块|推荐代码

    10. **自动化脚本**:FTP模块可以用于编写自动化脚本,实现定期备份、同步文件等任务,提升工作效率。 "FTP模块.cls"可能是一个面向对象编程中的类文件,封装了上述的FTP操作。在Python中,我们可以使用ftplib库来...

Global site tag (gtag.js) - Google Analytics