本文介绍如何使用 java.net.URLConnection 类从 FTP 服务器下载远程文件,而无需使用第三方库,如 Apache Commons Net、Tomcat 等。

该技术基于 RFC1738 规范,该规范定义了用于 FTP 访问的 URL 格式。此应用程序从服务器下载文件并列出下载文件的大小和下载所消耗的时间。

客观的

在本教程中,我们将学习:

  • 什么是FTP?
  • 我们如何使用java代码从您的FTP服务器下载文件?
  • 的优点和缺点

什么是FTP?

FTP(文件传输协议)是通过 Internet 交换文件的最简单、最安全的方式。FTP 是一种使用 Internet 在两台远程计算机之间传输文件的快速而可靠的方法。基本的 FTP 连接由调用 FTP 服务器的远程计算机(客户端)组成。FTP 连接以两种方式传输信息:客户端可以从服务器上传内容或将内容下载到服务器。

为了建立连接,只需指示“客户端”连接到特定的 FTP 服务器。

为了通过 FTP 传输文件(上传或下载):

  • 登录已配置为 FTP 服务器的远程计算机。
  • 输入用户名和密码以访问远程系统。
  • 选择远程系统上的特定目录,其中包含您要下载或上传的文件。
  • 将文件传输到系统或从系统传输。

我们如何使用java代码从您的FTP服务器下载文件?

在本文中,我们将学习如何使用java.net.URLConnection 类从FTP 服务器下载远程文件,而不使用Apache、Tomcat 服务器等第三方服务器。该技术基于 RFC1738 规范,该规范定义了 FTP 访问的 URL 格式,如下所示: ftp://username:password@hostname:port/path

此 URL 方案称为 FTP URL,其中:

  • username :是要连接到的 FTP 服务器上的 FTP 帐户的用户名。
  • password : 是用户名对应的密码。
  • hostname :是 FTP 服务器的主机名或 IP 地址。
  • port :是服务器正在侦听的端口号。[默认端口为 21]
  • path :远程文件的路径,格式如下:
<dir1>/<dir2>/.../<dirN>/<name>;type=<typecode>

在哪里:

  • <dir1>/<dir2>/.../<dirN> :是形成特定目录结构的路径元素(单词 <dir> 表示目录)。
  • <名称> :文件/目录名称。
  • :type=<typecode> :这是可选部分。这部分指定传输模式,其中 typecode 可以是以下字符之一:a(ASCII - 文本模式),i(IMAGE - 二进制模式),d(目录列表)。如果这部分被省略或后悔,客户端必须猜测适当的模式。

例如,如果要使用用户oracle 和密码secret下载主机www.myclientserver.com上路径/myproject/2013下的zip 文件Project.zip ,请构造以下URL:ftp://oracle:secret@www。 myclientserver.com/myproject/2013/Project.zip;type=i

将该 URL 粘贴到浏览器的地址栏中,它将处理文件下载。

在 Java 中,我们使用类名:URLConnection 在 FTP URL 上打开连接,然后获取打开的连接的输入流以读取字节数据。使用文件输出流将字节保存到文件中。

例如:

  • String ftpUrl = "ftp://oracle:secret@www.myclientserver.com/myproject/2013/Project.zip;type=i";
  • String saveFile = "Project.zip";
  • URL url = new URL(ftpUrl);
  • URLConnection conn = url.openConnection();
  • InputStream inputStream = conn.getInputStream();
  • FileOutputStream outputStream = new FileOutputStream(saveFile); // reads from inputStream and write to outputStream

下面的程序描述了如何使用类 URLConnection 使用 FTP URL 技术在 FTP 服务器上下载文件:

此外,该技术有其自身的优点和缺点,如下所示:

清单 1:Download.java

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.io.File;class Download {private static final int BUFFER_SIZE = 4096;public static void main(String args[]) { // this is a functionlong startTime = System.currentTimeMillis();String ftpUrl = "ftp://ftp.f-secure.com/misc/unixutil/skeysrcs.zip";String file = "";// name of the file which has to be downloadString host = ""; // ftp serverString user = ""; // user name of the ftp serverString pass = ""; // password of the ftp serverString savePath = "F:\\skeysrcs.zip";ftpUrl = String.format(ftpUrl, user, pass, host);System.out.println("Connecting to FTP server");try {URL url = new URL(ftpUrl);URLConnection conn = url.openConnection();InputStream inputStream = conn.getInputStream();long filesize = conn.getContentLength();System.out.println("Size of the file to download in kb is:-" + filesize / 1024);FileOutputStream outputStream = new FileOutputStream(savePath);byte[] buffer = new byte[BUFFER_SIZE];int bytesRead = -1;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}long endTime = System.currentTimeMillis();System.out.println("File downloaded");System.out.println("Download time in sec. is:-" + (endTime - startTime) / 1000);outputStream.close();inputStream.close();} catch (IOException ex) {ex.printStackTrace();}}
}

清单 1 定义了一个 java 文件“Download.java”,它定义了一种机制,使用给定的 url 和有效的用户名和密码连接到 ftp 服务器。一旦使用给定的 ftp url 建立连接,连接将使用提交给 ftp url 的用户名和密码进行身份验证。一个 java.net java API 用于建立覆盖应用程序的网络部分。

这个类定义了类变量:

  • BUFFER_SIZE:一个整数类型的静态变量,它定义了一次要保持下载文件内容的流的缓冲区大小。

还有一个方法:

download():调用下载连接并从服务器下载文件的方法。它还定义了一组变量:

  • startTime : long 类型变量,由当前系统时间初始化,该变量用于列出下载所消耗的时间。
  • ftpUrl:一个字符串类型变量,用于保存将用于连接 ftp 主机的 url 信息。
  • file:命名下载文件的字符串类型变量。
  • host:一个字符串类型变量,列出了要连接的主机的名称。
  • user:用于保存用户名信息的字符串类型变量。
  • password:用于保存密码信息的字符串类型变量。
  • savePath:一个字符串类型变量,保存文件位置以保存下载文件。
  • outputStream : FileOutputStream 类型变量,使用“savePath”变量输出要保存在给定系统位置的下载文件。
  • url:一个 URL 类类型变量,它创建使用 ftpUrl 命中给定主机的请求。
  • buffer:大小为 BUFFER_SIZE 的字节数组。
  • bytesRead:一个整数类型变量,用于保存从服务器接收字节的信息。
  • endTime:当文件下载结束时,当前系统时间的整数类型变量。

下载文件后,下载消耗的时间将与下载的文件大小一起列出。该文件将使用下面列出的逻辑逐字节读取:

while((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead) ; }

一旦文件被下载,我们就有责任关闭打开的 FileOutputStream。要关闭流,我们使用 FileOutputStream 类中定义的 close() 方法。

输入流用于从 ftp 服务器获取数据,它将使用连接类方法接受字节流中的数据。要获取字节流,使用 getInputStream() 方法。使用连接的 getContentLength() 方法获取下载文件。当我们打开输入流时,我们有责任关闭这个流。要关闭输入流,使用 InputStream 类的 close() 方法。

下载文件后,消耗的图块通过从结束时间减去开始时间并将其除以 1000 计算为(结束时间 - 开始时间)/1000)。

清单 2:FtpUrlDownload.java

public class FtpUrlDownload{ public static void main(String[] args){ Download d1 = new Download() ; d1.download() ; try{ Thread.sleep(500) ; } catch(Exception e) { System.out.println(c); } } }

清单 2 定义了一个 java 文件“FtpUrlDownload.java”,它创建了一个“Download”类的实例,并将一个名为“download()”的方法类化,以将文件从给定的服务器 url 下载到下载类中。该类使用连接异常机制,尝试与服务器建立连接、从ftp主机接收数据并保存下载的文件时可能会发生连接异常机制。

好处:

使用简单,不需要第三方FTP工具或应用服务器。

缺点:

灵活性和控制性较差,无法检查 FTP 服务器的响应代码。如果中途下载失败,我们必须重新下载,因为无法恢复上传。

结论:

通过这篇文章,我们了解了 FTP 协议及其使用。在这里,我们使用 java.net API 创建了文件下载应用程序,用于下载给定 url 和用户身份验证信息的应用程序。在这个应用程序中,我们来了解文件下载过程。我们学习,我们如何计算下载文件的大小,文件下载消耗的时间并将文件保存到系统。

使用 Java 下载FTP文件相关推荐

  1. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  2. java下载网络中的文件,java下载网络文件解决思路

    java下载网络文件 下面这段代码是下载一个http网络文件的代码,但有时候下载下来的图片是完整的,有时候下载下来的不完整,还有下载的ppt,pdf之类,也是打不开的.请大件们给指导一下,小弟感激不尽 ...

  3. 如何通过Java下载远程文件到浏览器

    如何通过Java下载远程文件到浏览器 整体思路: 首先获取远程资源的文件输入流,使用HttpServletResponse的输出流,通过Java io转换将输入流转成输出流,写入指定文件,下载到浏览器 ...

  4. java下载zip文件损坏_使用Java下载.zip文件会导致损坏的.zip文件?

    我写了这个方法来下载最新的Selenium Chrome驱动程序,它不起作用.它导致损坏的.zip文件.任何人都可以发现我的错误在哪里?使用Java下载.zip文件会导致损坏的.zip文件? priv ...

  5. geo ftp环境变量 export source ~/.bashrc Linux中filezilla下载ftp文件 ftp.ncbi.nlm.nih.gov linux下载 ftp下载geo非原始数

    https://filezilla-project.org/download.php?show_all=1 右键 检测(inspect) 获得下载链接 Linux如何下载ftp文件 2 Filezil ...

  6. java中ftp删除文件,Java 实现ftp 文件上传、下载和删除

    实现FTP相关功能 1.下载相应的jar包 commons-net-3.6.jar 2.代码实现 import java.io.File; import java.io.FileInputStream ...

  7. java下载的文件不完整_JAVA 解决FTP下载文件不完整问题

    在使用java的ftp下载服务器上的文件获取文件的byte[],然后对byte进行加密传输时, 注意是要获取byte[],而不是下载文件到本地: 发现下载的byte[]大小总是小于文件实际大小,并且下 ...

  8. MapReduce基础开发之五分布式下载ftp文件到本地再迁移到hdfs

    为利用Hadoop集群平台的分布存储和计算能力,基于MapReduce将ftp文件分布式下载并上传到HDFS中. 1.文件移动流程:ftp服务器->datanode本地目录->HDFS目录 ...

  9. JAVA实现FTP文件传输

    一.FTP介绍 FTP是File Transfer Protocol(文件传输协议)的英文简称,即文件协议.用于Internet上的控制文件的双向传输.同时,它是一个应用程序(Application) ...

  10. linux中下载ftp文件

    一.最简单的方法: wget 下面的命令用来下载ftp服务器上指定目录的所有文件 [html] view plaincopyprint? wget ftp://IP:PORT/* --ftp-user ...

最新文章

  1. 业余实现一个统计A股数据工具
  2. Android训练课程(Android Training) - 高效的显示图片
  3. Uva1595 对称轴
  4. [BJOI2015] 树的同构
  5. hdu 5023 poj 2777(线段染色)2014 ACM/ICPC Asia Regional 广州 Online
  6. 设置tomcat过期缓存
  7. android emoji 开源库,Emoji开源库推荐_支持emoji表情的js的开源项目总汇
  8. 社会化分享(附源码)
  9. 曾鸣:互联网的本质是什么?| 内部干货
  10. Sql递归(用with 实现递归查询)
  11. JAVA 类名.class是什么意思?
  12. Java生成XML数字签名
  13. 华为鸿蒙龙头股一览表_华为鸿蒙概念股龙头一览?华为鸿蒙概念股有哪些(表)...
  14. 电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分
  15. python中wx是啥_设置wx.框架大小(wxPython wxWidgets)
  16. 湖州顶赞(方言唱的,很幽默)
  17. uni-app吊起微信公众号支付
  18. rdkit 读写分子操作
  19. JAVA----初学接口常见的问题
  20. SpringBoot智能养老公寓系统

热门文章

  1. php 时间戳转换日期格式用法
  2. 经纬度(度十进制分)—— 度分秒 转换
  3. js实现实时的时间显示
  4. android viewholder模式,为什么在ViewHolder模式中ViewHolder类应该是静态的?
  5. 草图大师su安装程序无法进行的解决办法。
  6. 微pe工具箱 系统安装教程_wepe启动盘制作教程|微pe工具箱怎么制作u盘启动盘
  7. 带省份的下拉框的html语言,js实现省份下拉菜单效果
  8. 虚幻4服务端linux,UE4 虚幻4教程 服务端构建后启动错误的解决方法
  9. 弯曲时空量子场论的历史与现状 (下)
  10. 基于二阶锥规划的主动配电网动态最优潮流求解