You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从多组字符串数组创建InputStream并上传至FTP服务器

实现方案:将字符串数组转换为指定格式的InputStream并上传至FTP

需求说明

需将以下三组数据转换为指定格式的文本流,再通过给定的fileUpload方法上传至FTP服务器:

  • String数组business(示例:['CONSUMER', 'TELUS'])
  • String数组position(示例:['Business', 'SMB','THPS'])
  • String类型isDone(示例:"Yes")

目标文本格式:

Business_Unit: 'TELUS', 'CONSUMER'
Position_Group: 'Business', 'SMB', 'THPS'
On-Cycle_Schedule: 'Yes' or 'No'


具体实现步骤

1. 编写数据转InputStream的工具方法

该方法负责将原始数据拼接成指定格式的字符串,再转换为InputStream(指定UTF-8编码避免乱码):

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

// 工具方法:将业务数据转换为指定格式的InputStream
private InputStream convertToInputStream(String[] businessArr, String[] positionArr, String isDoneStr) {
    // 处理空值,避免空指针
    if (businessArr == null) businessArr = new String[0];
    if (positionArr == null) positionArr = new String[0];
    if (isDoneStr == null) isDoneStr = "No";

    // 处理Business_Unit:反转数组并拼接成带单引号的格式(匹配示例倒序要求)
    List<String> businessList = Arrays.asList(businessArr);
    Collections.reverse(businessList);
    String businessStr = businessList.stream()
                                     .map(item -> "'" + item + "'")
                                     .collect(Collectors.joining(", "));

    // 处理Position_Group:直接拼接成带单引号的格式
    String positionStr = Arrays.stream(positionArr)
                               .map(item -> "'" + item + "'")
                               .collect(Collectors.joining(", "));

    // 处理On-Cycle_Schedule行
    String isDoneLine = String.format("On-Cycle_Schedule: '%s'  or 'No'", isDoneStr);

    // 拼接所有行,使用系统适配的换行符
    String content = String.format("Business_Unit:     %s%n" +
                                   "Position_Group:    %s%n" +
                                   "%s", businessStr, positionStr, isDoneLine);

    // 转换为InputStream
    return new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
}

2. 修正并完善Action类的generatePayroll方法

修复原代码中fileUpload调用参数缺失、isUploadFile未初始化的问题,整合转换逻辑:

public ActionForward generatePayroll(ActionMapping mapping, ActionForm form,
                       HttpServletRequest request, HttpServletResponse response) {
    SessionInfoForm _form = (SessionInfoForm) form;
    String isDone = "Yes";
    String[] business = request.getParameterValues("selectedBusinessValues");
    String[] position = request.getParameterValues("selectedPositionValues");
    String fileName = "result.csv";
    // 补充FTP目标目录,根据实际服务器路径调整
    String dirName = "/payroll/upload";

    // 生成待上传的InputStream
    InputStream isUploadFile = convertToInputStream(business, position, isDone);

    // 调用FTP上传方法
    boolean uploadSuccess = fileUpload(isUploadFile, dirName, fileName);

    // 可根据上传结果添加后续处理(如前端提示)
    request.setAttribute("uploadStatus", uploadSuccess ? "文件上传成功" : "文件上传失败");

    return mapping.findForward("success");
}

注意事项

  • 如果不需要Business_Unit的倒序格式,可删除Collections.reverse(businessList)这一行;
  • dirName参数需根据FTP服务器的实际目录路径配置;
  • 可根据业务需求在工具方法中添加更多异常捕获逻辑,增强代码健壮性。

内容的提问来源于stack exchange,提问作者user18901048

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:01:28