java连接FTP服务器图文教程

 更新时间:2023年08月08日 10:24:49   作者:AndyWei147  
这篇文章主要给大家介绍了关于java连接FTP服务器的相关资料,Ftp是一种常见的文件存储服务器,在很多的项目中都有使用,方便存储各种格式的文件,使用java连接ftp文件服务器也是常用的工具类,需要的朋友可以参考下

这一期,我们来学习一下如何用Java连接FTP服务器。在工程项目中,我们往往需要连接FTP服务器。当我们有此需求时,可以从两个方面考虑。第一,根据FTP协议自己写出一套程序,这是一种思路,当然这是一件很费时又耗成本的一件事。我们是工程师,我们的目的是把需求实现,而不是科研项目。所以得考虑另一种思路,去寻找已经做好的API。好巧,刚好有一个开源组织为我们做好了这个API,那就是伟大的Apache。下面就开始时根据Apache给我们提供的API完成我们的需求。

第一步,下载jar包,登录官网如下:

然后找到“Projects”点进去,出现下拉框。点击“Project List”

找到Commons点进去

往下滑,找到“net”

点进去,然后在左上角找到“download”

点击然后往下滑,找到如图

其中Binaries是编译后的jar,Source是源代码。一般使用的是编译后的jar,将其下载,下载之后就是新建项目导jar包。如何导jar,不会再这里说。此时,我们jar已经准备好。我们还需要一个ftp服务器,如何建立ftp服务器也不会再这里说。

现在假设你已经创建好项目,已经建立好ftp服务器,下面就直接上代码了。

package my;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class TestFTPClient
{
	// API里对中文FTP目录的处理有点问题
	// 在调用 changeWorkingDirectory() / listFiles()等方法时,将参数路径转换一下
	public static String ftpPath(String path)
	{
		try
		{
			return new String(path.getBytes("UTF-8"), FTP.DEFAULT_CONTROL_ENCODING);
		} catch (UnsupportedEncodingException e)
		{
			return "";
		}
	}
	public static void main(String[] args) throws Exception
	{
		FTPClient ftp = new FTPClient();
		// 连接服务器
		ftp.connect("127.0.0.1", 21);
		int reply = ftp.getReplyCode();
		if (!FTPReply.isPositiveCompletion(reply))
		{
			ftp.disconnect();
			System.out.println("** 无法连接至FTP服务器!");
			System.exit(1);
		}
		if (!ftp.login("test", "123456"))
		{
			ftp.logout();
			System.out.println("** 错误的用户名或密码!");
			System.exit(1);
		}
		System.out.println("Connected.");
		// 字节传输 BINARY_FILE_TYPE
		// 文本传输 ASCII_FILE_TYPE
		// 一般使用BINARY模式来传输文件,很少使用 ASCII_FILE_TYPE
		ftp.setFileType(FTP.BINARY_FILE_TYPE);
		// 主动模式: enterLocalActiveMode()
		// 被动模式: enterLocalPassiveMode()
		// 一般选择被动模式
		ftp.enterLocalPassiveMode();
		// 设置控制通道的字符集, 要与服务端的设定一致
		ftp.setControlEncoding("UTF-8");
		// 切换目录 ( 用ftpPath() 转换一下 )
		// boolean rc = ftp.changeWorkingDirectory(ftpPath("/图片"));
		// if(!rc)
		// {
		// System.out.println("切换目录出错!");
		// }
		// ...
		//
		// 列出所有的文件/子目录
		// listFile(ftp);
		//上传一个文件
		//upload(ftp);
		// 下载一个文件
		download(ftp);
		ftp.logout();
		ftp.disconnect();
		System.out.println("Quit.");
	}
	public static void listFile(FTPClient ftp)
	{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("> list");
		FTPFile[] ftpFiles;
		try
		{
			ftpFiles = ftp.listFiles();
			for (FTPFile f : ftpFiles)
			{
				String time = sdf.format(f.getTimestamp().getTime());
				String info = "";
				if (f.isDirectory())
					info = String.format("+ %-20s", f.getName());
				else
					info = String.format("  %-20s %8d   %s", f.getName(), f.getSize(), time);
				System.out.println(info);
			}
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	// 上传一个文件
	public static void upload(FTPClient ftp)
	{
		File localFile = new File("E:\\代码\\HBiuder.zip");
		InputStream inStream;
		OutputStream outStream;
		try
		{
			String remotePath = ftpPath(localFile.getName());
			inStream = new FileInputStream(localFile);
			//
			// 小文件直接 用
			// ftp.storeFile(remotePath, inStream);
			//大文件时用这个方法
			outStream = ftp.storeFileStream(remotePath);
			// 大文件,可以自己掌握进度
			byte[] buffer = new byte[4000];
			while (true)
			{
				int n = inStream.read(buffer);
				if (n <= 0)
					break;
				outStream.write(buffer, 0, n);
			}
			inStream.close();
			outStream.close();
		} catch (FileNotFoundException e1)
		{
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//文件下载
	public static void download(FTPClient ftp) throws Exception
	{
	       File localFile = new File("D:/tmp/copy.zip");
	        localFile.getParentFile().mkdirs();
	        // 
	        String remotePath = ftpPath("/HBiuder.zip");
	        OutputStream outStream = new FileOutputStream(localFile);
	        // 小文件直接 用 
	        // ftp.retrieveFile(remotePath, outStream);
	        // 大文件,可以自己掌握进度
	        InputStream inStream = ftp.retrieveFileStream(remotePath);
	        if(inStream == null)
	        	throw new Exception("远程文件不存在!" + remotePath);
	        byte[] buffer = new byte[4000];
	        while(true)
	        {
	        	int n =inStream.read(buffer);
	        	if(n <= 0) break;
	        	outStream.write(buffer,0,n);
	        }
	        inStream.close();
	        outStream.close();
	}
}

 仅供参考,如有不足,多多指教。

到此这篇关于java连接FTP服务器的文章就介绍到这了,更多相关java连接FTP服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java排序之Comparable和Comparator比较器详解

    Java排序之Comparable和Comparator比较器详解

    这篇文章主要介绍了Java排序之Comparable和Comparator比较器详解,Comparable<T>是内部比较器,Comparator<T>是外部比较器,最推荐使用Comparator<T>接口排序,Comparator提供静态方法很方便,推荐使用,需要的朋友可以参考下
    2024-01-01
  • Spring Security+JWT简述(附源码)

    Spring Security+JWT简述(附源码)

    SpringSecurity是一个强大的可高度定制的认证和授权框架,对于Spring应用来说它是一套Web安全标准,下面这篇文章主要给大家介绍了关于Spring Security+JWT简述的相关资料,需要的朋友可以参考下
    2023-04-04
  • spring+Jpa多数据源配置的方法示例

    spring+Jpa多数据源配置的方法示例

    这篇文章主要介绍了spring+Jpa多数据源配置的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码

    SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码

    本文主要介绍了SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Java数组中的元素删除并实现向前移的代码

    Java数组中的元素删除并实现向前移的代码

    这篇文章主要介绍了Java数组中的元素删除并实现向前移的代码的相关资料,需要的朋友可以参考下
    2016-05-05
  • 浅析idea生成war包放入tomcat的路径访问问题

    浅析idea生成war包放入tomcat的路径访问问题

    这篇文章主要介绍了关于idea 生成war 包放入tomcat的路径访问问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Spring Boot + Mybatis Plus实现树状菜单的方法

    Spring Boot + Mybatis Plus实现树状菜单的方法

    这篇文章主要介绍了Spring Boot + Mybatis Plus实现树状菜单,包括实体类中添加子菜单列表和集合及构建菜单树的详细代码,代码简单易懂,需要的朋友可以参考下
    2021-12-12
  • IDEA搭建Maven模块化项目的实现

    IDEA搭建Maven模块化项目的实现

    本文主要介绍了IDEA搭建Maven模块化项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • java 中maven pom.xml文件教程详解

    java 中maven pom.xml文件教程详解

    这篇文章主要介绍了java 中maven pom.xml文件教程详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Java实现图片上传到服务器并把上传的图片读取出来

    Java实现图片上传到服务器并把上传的图片读取出来

    在各大网站上都可以实现上传头像功能,可以选择自己喜欢的图片做头像,从本地上传,今天小编给大家分享Java实现图片上传到服务器并把上传的图片读取出来,需要的朋友参考下
    2017-02-02

最新评论