如何从多组字符串数组创建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
相关产品推荐
相关产品推荐

