通过FTP下载,修改待下载的txt文件

本文介绍了一种通过FTP客户端从远程服务器下载特定检查结果文件的方法。该方法利用Java的FTPClient类实现文件的检索和下载,并针对特定文件名规则进行匹配,确保文件正确下载并能被进一步处理。

/**

* 检查结果记录比较多,存储于独立的数据库服务器

* @param mapping

* @param form

* @param request

* @param response

* @return

*/

public ActionForward checkResultDown(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws JSchException {

 

String downDate = request.getParameter("downDate");

String selOrg = "";

String downFile = "";

try {

selOrg= URLDecoder.decode(request.getParameter("selOrg"),"UTF-8");

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

}

//服务器上存在的文件名称规则:机构代码_日期

downFile = selOrg.split("_")[0]+"_"+downDate;

FTPClient ftpClient = new FTPClient();

try {

String hosts =  Constant.getStPara("hosts");

String user = Constant.getStPara("user2");

String pwd = Constant.getStPara("pwd");

 

String tmpPath = Constant.getStPara("tmpResultPath");

File f = new File(tmpPath);

if(!f.exists()){

f.mkdirs();

}

 

ftpClient.connect(hosts);

ftpClient.setControlEncoding("UTF-8");  

 

FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);  

conf.setServerLanguageCode("zh");

//FTP登录后用户会有自己初始化配置的目录

ftpClient.login(user, pwd);

FTPFile[] fs = ftpClient.listFiles();

ftpClient.setBufferSize(1024);

// 设置文件类型(二进制)

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

 

FileOutputStream fl = null;

 

for (int i = 0; i < fs.length; i++) {

FTPFile ff = fs[i];

String fileName  = ff.getName();

if (fileName.startsWith(selOrg)) {

 

ServletOutputStream outputStream = response.getOutputStream();

// 这个就就是弹出下载对话框的关键代码

response.setHeader("Content-disposition","attachment;filename="+ fileName);

fl = new FileOutputStream(tmpPath+fileName);

ftpClient.retrieveFile(fileName, fl);

//将FTP服务器上的txt文件保存到本地

fl.flush();

fl.close();

       BufferedReader in_=new BufferedReader(new FileReader(tmpPath+fileName));

       String line;

       int count=1;

       while((line=in_.readLine())!=null){

       if(count==1){

       outputStream.println("规则ID,检测日期,规则说明,规则组ID,检查专题,系统来源,检查表,检查列,检查维度,维度细分,机构号,检查总数,通过数,失败数,出错率,通过率");

       }

       outputStream.println(line);

           count++;

       }

       in_.close();

outputStream.flush();

outputStream.close();

break;

}

}

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException(e.getMessage());

} finally {

try {

ftpClient.disconnect();

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException("关闭FTP连接发生异常!", e);

}

}

 

    return null;

}

首先我们创建一个用户账户用于登录FTP进行操作。右键点击桌面的我的点击选择管理选项,进入管理界面打开本地用户和组选项,我们可以看到列表中的用户选项,然后右键用户选项,在下拉菜单中选择新用户,开始建立我们的用户,填写用户名称以及密码。描述可以不填。然后点击创建。创建完成在右边的用户列表中就可以看到我们创建的用户了。创建用户完成后我们开始添加IIS程序服务。打开电脑的开始菜单找到控制面板选项,打开进入。进入控制面板界面找到程序选项,点击下方的卸载程序按钮,进入到安装程序列表界面。进入到程序和功能选项栏目,我们可以看到左上方的菜单栏中有一个打开或关闭Windows功能选项,点击进入。进入到打开或关闭Windows功能界面,我们在好到Internet信息服务,然后点击打开在FTP服务器前面打勾,也就是把其子菜单的FTP服务和FTP扩展性打勾,然后点击下方的确定按钮。添加完成 IIS服务之后,开始创建我们的FTP站点,右键点击我的电脑选择管理,然后找到服务和应用程序选项点击打开,接着点击Internet信息服务管理--此时我们可以看到右边出现了一个连接框。点击打开连接框下面的本地主机主页,然后可以看到应用程序池和网站选项,我们右键点击网站选择添加网站。然后在弹出的添加网站框里面输入我们的网站名称,物理路径也就是我们的FTP本地文件夹,我们可以在磁盘里面新建好,然后选择添加,IP地址选择我们本机的IP地址。新建完成我们的FTP之后,我们可以看到网站的下方多出了一个我们刚刚建立的网,右键点击网站名称,选择添加FTP站点发布,然后开始绑定和SSL设置,端口号选择2121.IP地址填写本机IP地址。然后我们打开电脑的浏览器在上方的地址栏里面输入FTP://IP地址:2121点击回车就可以看到我们的FTP服务器已经添加成功了我们可以在添加的本地文件夹里面来管理我们FTP服务器文上传与下载。然后进入身份验证设置选项,我们根据个人用途选择身份验证的基本要求,已经用户的相关权限,设置完毕点击完成选项。此时会提醒我们FTP站点发布成功。
### FTP协议定义及其文件下载方式 #### FTP协议定义 FTP(File Transfer Protocol,文件传输协议)是一种用于在网络中进行文件传输的标准通信协议[^1]。其核心目的是允许用户在两台计算机间高效、可靠地传递文件。作为一种基于TCP/IP的应用层协议,FTP具备跨平台特性,能够在不同操作系统如Windows、Linux和Unix之间无缝协作[^2]。 FTP架构采用典型的客户端-服务器模型(C/S)。其中,FTP服务器负责存储和管理文件资源,而FTP客户端则充当用户的操作入口,通过遵循FTP协议与服务器交互以实现文件访问或修改等功能[^1]。 --- #### 如何通过FTP下载文件 ##### 方法一:使用命令行工具 借助命令行界面,可以通过以下步骤完成文件下载任务: 1. 启动终端窗口。 2. 输入`ftp`指令连接到目标FTP服务器,例如: ```bash ftp ftp.example.com ``` 3. 提供有效的用户名和密码进行身份验证。 4. 利用`get`命令指定待下载的目标文件名,例如: ```bash get example.txt ``` 5. 下载完成后退出会话: ```bash quit ``` 整个过程严格依据FTP协议规定动作序列执行,确保数据包按照既定规则从源位置迁移到目的地[^2]。 ##### 方法二:编程实现自动化下载 对于批量处理需求场景,则可通过编写脚本来简化流程控制逻辑。以下是Java语言环境下利用Apache Commons Net库构建的一段示范代码: ```java import org.apache.commons.net.ftp.FTPClient; import java.io.FileOutputStream; import java.io.IOException; public class FtpDownloadExample { public static void main(String[] args) throws IOException { FTPClient ftpClient = new FTPClient(); try (FileOutputStream outputStream = new FileOutputStream("本地保存路径")) { // 连接到FTP服务器并登录 ftpClient.connect("IP地址", 21); boolean loginSuccess = ftpClient.login("用户名", "密码"); if (!loginSuccess) throw new RuntimeException("无法登录"); // 设置文件类型为二进制模式 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 执行文件下载操作 boolean success = ftpClient.retrieveFile("远程文件路径", outputStream); if (!success) throw new RuntimeException("文件下载失败"); } finally { ftpClient.logout(); // 登出 ftpClient.disconnect(); // 断开连接 } } } ``` 上述代码片段展示了如何初始化一个FTP客户端实例[`FTPClient`](https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html),并通过调用相应的方法完成具体业务功能——即从远端获取所需资料副本存放到本地磁盘上[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值