IT序号网

SFTP文件读取工具类知识解答

leader 2021年06月13日 编程语言 155 0
import java.io.ByteArrayInputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import org.apache.commons.io.IOUtils; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 
import org.apache.commons.net.ftp.FTPReply; 
import org.junit.Test; 
 
 
 
import com.sun.java_cup.internal.runtime.Scanner; 
 
public class SftpUtil { 
 	/** 
 	 * 向ftp写文件(数据) 
 	 */ 
 	@Test 
 	public void uploadFileToSftp() { 
  
 		// 要写入的文件内容 
 		String fileContent = "hello world,你好世界"; 
 		// ftp登录用户名 
 		String userName = "admin"; 
 		// ftp登录密码 
 		String userPassword = "xxxx"; 
 		// ftp地址 
 		String server = "127.0.0.1";//直接ip地址 
 		// 创建的文件 
 		String fileName = "ftp.txt"; 
 		// 指定写入的目录 
 		String path = "wd"; 
  
 		FTPClient ftpClient = new FTPClient(); 
 		try { 
 			InputStream is = null; 
 			// 1.输入流 
 			is = new ByteArrayInputStream(fileContent.getBytes()); 
 			// 2.连接服务器 
 			ftpClient.connect(server); 
 			// 3.登录ftp 
 			ftpClient.login(userName, userPassword); 
 			// 4.指定写入的目录 
 			ftpClient.changeWorkingDirectory(path); 
 			// 5.写操作 
 			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 
 			ftpClient.storeFile(new String(fileName.getBytes("utf-8"), 
 					"iso-8859-1"), is); 
 			is.close(); 
 		} catch (Exception e) { 
 			e.printStackTrace(); 
 		} finally { 
 			if (ftpClient.isConnected()) { 
 				try { 
 					ftpClient.disconnect(); 
 				} catch (Exception e) { 
 					e.printStackTrace(); 
 				} 
 			} 
 		} 
 	} 
 	 
 	/** 
 	 * ftp下载数据 
 	 */ 
 	@Test 
 	public void downFileFromSftp() { 
 		// ftp登录用户名 
 		String userName = ""; 
 		// ftp登录密码 
 		String userPassword = ""; 
 		// ftp地址:直接IP地址 
 		String server = ""; 
 		// 创建的文件 
 		String fileName = "09buy.txt"; 
 		// 指定写入的目录 
 		String path = "uploads//201607"; 
 		// 指定本地写入文件 
 		String localPath="F:\\"; 
 		 
 		FTPClient ftp = new FTPClient(); 
 		try { 
 			int reply; 
 			//1.连接服务器 
 			ftp.connect(server); 
 			//2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
 			ftp.login(userName, userPassword); 
 			//3.判断登陆是否成功 
 			reply = ftp.getReplyCode(); 
 			if (!FTPReply.isPositiveCompletion(reply)) { 
 				ftp.disconnect(); 
 			} 
 			//4.指定要下载的目录 
 			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录 
 			//5.遍历下载的目录 
 			FTPFile[] fs = ftp.listFiles(); 
 			for (FTPFile ff : fs) { 
 				//解决中文乱码问题,两次解码 
 				byte[] bytes=ff.getName().getBytes("iso-8859-1"); 
 				String fn=new String(bytes,"utf8"); 
 				System.out.println("fname:"+fn); 
 				if (fn.equals(fileName)) { 
 					//6.写操作,将其写入到本地文件中 
 					File localFile = new File(localPath + ff.getName()); 
 					OutputStream is = new FileOutputStream(localFile); 
 					ftp.retrieveFileStream(ff.getName()); 
 					ftp.retrieveFile(ff.getName(), is); 
 					is.close(); 
 				} 
 			} 
 			ftp.logout(); 
 		} catch (IOException e) { 
 			e.printStackTrace(); 
 		} finally { 
 			if (ftp.isConnected()) { 
 				try { 
 					ftp.disconnect(); 
 				} catch (IOException ioe) { 
 				} 
 			} 
 		} 
 	} 
 	 
 	@Test 
 	public void ReadFileFromSftp() { 
 		// ftp登录用户名 
 		String userName = ""; 
 		// ftp登录密码 
 		String userPassword = ""; 
 		// ftp地址:直接IP地址 
 		String server = ""; 
 		// 创建的文件 
 		String fileName = "09buy.txt"; 
 		// 指定写入的目录 
 		String path = "uploads//201607"; 
 		// 指定本地写入文件 
 		String localPath="F:\\"; 
 		 
 		FTPClient ftp = new FTPClient(); 
 		try { 
 			int reply; 
 			//1.连接服务器 
 			ftp.connect(server); 
 			//2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
 			ftp.login(userName, userPassword); 
 			//3.判断登陆是否成功 
 			reply = ftp.getReplyCode(); 
 			if (!FTPReply.isPositiveCompletion(reply)) { 
 				ftp.disconnect(); 
 			} 
 			//4.指定要下载的目录 
 			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录 
 			//5.遍历下载的目录 
 			FTPFile[] fs = ftp.listFiles(); 
 			for (FTPFile ff : fs) { 
 				//解决中文乱码问题,两次解码 
 				byte[] bytes=ff.getName().getBytes("iso-8859-1"); 
 				String fn=new String(bytes,"utf8"); 
 				System.out.println("fname:"+fn); 
 				if (fn.equals(fileName)) { 
 					//6.写操作,将其写入到本地文件中 
 					InputStream  inputStream=ftp.retrieveFileStream(ff.getName()); 
 					String text = IOUtils.toString(inputStream); 
 					System.out.println(text); 
 					 
 				} 
 			} 
 			ftp.logout(); 
 		} catch (IOException e) { 
 			e.printStackTrace(); 
 		} finally { 
 			if (ftp.isConnected()) { 
 				try { 
 					ftp.disconnect(); 
 				} catch (IOException ioe) { 
 				} 
 			} 
 		} 
 	} 
 } 
 



版本二,由于原先没考虑到端口,加上端口 还有 读取文件为空的Bug


import java.io.ByteArrayInputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.HashMap; 
import java.util.Map; 
 
import org.apache.commons.io.IOUtils; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 
import org.apache.commons.net.ftp.FTPReply; 
import org.junit.Test; 
 
public class SftpUtil { 
	 
	public final static String server ; 
	public final static String user ; 
	public final static String password ; 
	public final static String port ; 
	 
	static 
	{ 
	     Map<String, String> map = new HashMap<String, String>();    
         map.put("server", "");   
         map.put("user", "");   
         map.put("password", "");  
		 map.put("port", ""); 		  
         PropertyUtil pUtil=new PropertyUtil("config//sftp.properties"); 
         map=pUtil.getValue(map);   
         server=map.get("server");   
         user=map.get("user");   
         password=map.get("password");  
		 port=map.get("port"); 
	} 
	 
 	/** 
 	 * 向ftp写文件(数据) 
 	 */ 
 	@Test 
 	public void uploadFileToSftp() { 
  
 		// 要写入的文件内容 
 		String fileContent = "hello world,你好世界"; 
 		// ftp登录用户名 
 		String userName = "admin"; 
 		// ftp登录密码 
 		String userPassword = "xxxx"; 
 		// ftp地址 
 		String server = "127.0.0.1";//直接ip地址 
 		// 创建的文件 
 		String fileName = "ftp.txt"; 
 		// 指定写入的目录 
 		String path = "wd"; 
  
 		FTPClient ftpClient = new FTPClient(); 
 		try { 
 			InputStream is = null; 
 			// 1.输入流 
 			is = new ByteArrayInputStream(fileContent.getBytes()); 
 			// 2.连接服务器 
 			ftpClient.connect(server,port); 
 			// 3.登录ftp 
 			ftpClient.login(userName, userPassword); 
 			// 4.指定写入的目录 
 			ftpClient.changeWorkingDirectory(path); 
 			// 5.写操作 
 			ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 
 			ftpClient.storeFile(new String(fileName.getBytes("utf-8"), 
 					"iso-8859-1"), is); 
 			is.close(); 
 		} catch (Exception e) { 
 			e.printStackTrace(); 
 		} finally { 
 			if (ftpClient.isConnected()) { 
 				try { 
 					ftpClient.disconnect(); 
 				} catch (Exception e) { 
 					e.printStackTrace(); 
 				} 
 			} 
 		} 
 	} 
 	 
 	/** 
 	 * ftp下载数据 
 	 */ 
 	@Test 
 	public void downFileFromSftp() { 
 		// ftp登录用户名 
 		String userName = "11"; 
 		// ftp登录密码 
 		String userPassword = "11"; 
 		// ftp地址:直接IP地址 
 		String server = "11"; 
 		// 创建的文件 
 		String fileName = "09buy.txt"; 
 		// 指定写入的目录 
 		String path = "uploads//201607"; 
 		// 指定本地写入文件 
 		String localPath="F:\\"; 
 		 
 		FTPClient ftp = new FTPClient(); 
 		try { 
 			int reply; 
 			//1.连接服务器 
 			ftp.connect(server,port); 
 			//2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
 			ftp.login(userName, userPassword); 
 			//3.判断登陆是否成功 
 			reply = ftp.getReplyCode(); 
 			if (!FTPReply.isPositiveCompletion(reply)) { 
 				ftp.disconnect(); 
 			} 
 			//4.指定要下载的目录 
 			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录 
 			//5.遍历下载的目录 
			ftp.enterLocalPassiveMode();//如果不加这个读取数据会为空 
 			FTPFile[] fs = ftp.listFiles(); 
 			for (FTPFile ff : fs) { 
 				//解决中文乱码问题,两次解码 
 				byte[] bytes=ff.getName().getBytes("iso-8859-1"); 
 				String fn=new String(bytes,"utf8"); 
 				System.out.println("fname:"+fn); 
 				if (fn.equals(fileName)) { 
 					//6.写操作,将其写入到本地文件中 
 					File localFile = new File(localPath + ff.getName()); 
 					OutputStream is = new FileOutputStream(localFile); 
 					ftp.retrieveFileStream(ff.getName()); 
 					ftp.retrieveFile(ff.getName(), is); 
 					is.close(); 
 				} 
 			} 
 			ftp.logout(); 
 		} catch (IOException e) { 
 			e.printStackTrace(); 
 		} finally { 
 			if (ftp.isConnected()) { 
 				try { 
 					ftp.disconnect(); 
 				} catch (IOException ioe) { 
 				} 
 			} 
 		} 
 	} 
 	 
 	@Test 
 	public void ReadFileFromSftp() { 
 		// ftp登录用户名 
 		String userName = "g11"; 
 		// ftp登录密码 
 		String userPassword = "11"; 
 		// ftp地址:直接IP地址 
 		String server = "11"; 
 		// 创建的文件 
 		String fileName = "09buy.txt"; 
 		// 指定写入的目录 
 		String path = "uploads//201607"; 
 		// 指定本地写入文件 
 		String localPath="F:\\"; 
 		 
 		FTPClient ftp = new FTPClient(); 
 		try { 
 			int reply; 
 			//1.连接服务器 
 			ftp.connect(server,port); 
 			//2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
 			ftp.login(userName, userPassword); 
 			//3.判断登陆是否成功 
 			reply = ftp.getReplyCode(); 
 			if (!FTPReply.isPositiveCompletion(reply)) { 
 				ftp.disconnect(); 
 			} 
 			//4.指定要下载的目录 
 			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录 
 			//5.遍历下载的目录 
			ftp.enterLocalPassiveMode();//如果不加这个读取数据会为空 
 			FTPFile[] fs = ftp.listFiles(); 
 			for (FTPFile ff : fs) { 
 				//解决中文乱码问题,两次解码 
 				byte[] bytes=ff.getName().getBytes("iso-8859-1"); 
 				String fn=new String(bytes,"utf8"); 
 				System.out.println("fname:"+fn); 
 				if (fn.equals(fileName)) { 
 					//6.写操作,将其写入到本地文件中 
 					InputStream  inputStream=ftp.retrieveFileStream(ff.getName()); 
 					String text = IOUtils.toString(inputStream); 
 					System.out.println(text); 
 					 
 				} 
 			} 
 			ftp.logout(); 
 		} catch (IOException e) { 
 			e.printStackTrace(); 
 		} finally { 
 			if (ftp.isConnected()) { 
 				try { 
 					ftp.disconnect(); 
 				} catch (IOException ioe) { 
 				} 
 			} 
 		} 
 	} 
 	 
 	public static String ReadFileFromSftp(String path,String fileName) { 
 		 
 		String result=""; 
 		FTPClient ftp = new FTPClient(); 
 		try { 
 			int reply; 
 			//1.连接服务器 
 			ftp.connect(server,port); 
 			//2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
 			ftp.login(user, password); 
 			//3.判断登陆是否成功 
 			reply = ftp.getReplyCode(); 
 			if (!FTPReply.isPositiveCompletion(reply)) { 
 				ftp.disconnect(); 
 			} 
 			//4.指定要下载的目录 
 			ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录 
 			//5.遍历下载的目录 
			ftp.enterLocalPassiveMode();//如果不加这个读取数据会为空 
 			FTPFile[] fs = ftp.listFiles(); 
 			for (FTPFile ff : fs) { 
 				//解决中文乱码问题,两次解码 
 				byte[] bytes=ff.getName().getBytes("iso-8859-1"); 
 				String fn=new String(bytes,"utf8"); 
 				if (fn.equals(fileName)) { 
 					InputStream  inputStream=ftp.retrieveFileStream(ff.getName()); 
 					result = IOUtils.toString(inputStream); 
 				} 
 				 
 			} 
 			ftp.logout(); 
 		} catch (IOException e) { 
 			e.printStackTrace(); 
 		} finally { 
 			if (ftp.isConnected()) { 
 				try { 
 					ftp.disconnect(); 
 				} catch (IOException ioe) { 
 				} 
 			} 
 		} 
 		 
 		return result; 
 	} 
 } 
 



发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

利用简单的过滤器 过滤特殊字符实现 防止XSS攻击知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。