
本文档介绍了如何在Java Structs框架中动态生成CSV文件,并将其上传到FTP服务器,而无需在本地磁盘上创建实际文件。通过使用ByteArrayOutputStream和ByteArrayInputStream,我们可以直接在内存中创建CSV数据流,然后将其传递给FTP上传方法,从而提高效率并避免不必要的磁盘操作。
在传统的Java Structs应用中,生成CSV文件并上传到FTP服务器通常涉及以下步骤:
这种方法存在一些缺点:需要在磁盘上创建临时文件,这可能会影响性能和安全性。此外,如果上传过程中出现错误,可能需要手动删除临时文件。
为了解决这些问题,我们可以使用ByteArrayOutputStream和ByteArrayInputStream来动态创建CSV文件,而无需在磁盘上创建实际文件。
立即学习“Java免费学习笔记(深入)”;
ByteArrayOutputStream是一个字节数组输出流,它可以将数据写入到内存中的字节数组中。ByteArrayInputStream是一个字节数组输入流,它可以从内存中的字节数组中读取数据。
以下是使用ByteArrayOutputStream和ByteArrayInputStream动态创建CSV文件并上传到FTP服务器的示例代码:
import java.io.*;
public ActionForward generatePayroll(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
SessionInfoForm _form = (SessionInfoForm) form;
SisTransactionsSession _config = _form.getSisTransactionsSession();
String loggedInUser = _form.getLoggedinEmployeeDVO().getLoginId().toUpperCase();
String[] business = request.getParameterValues("selectedBusinessValues");
String[] position = request.getParameterValues("selectedPositionValues");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (Writer writer = new OutputStreamWriter(bos)) {
writer.write(business.toString());
writer.write(position.toString());
} catch (IOException e) {
e.printStackTrace();
// 处理异常
return mapping.findForward("error"); // 或者其他错误处理方式
}
InputStream inputStream = new ByteArrayInputStream(bos.toByteArray());
// 调用FTP上传方法
boolean uploadSuccess = fileUpload(inputStream, "your_directory", loggedInUser, "PAYROLL_PRM.csv");
if (uploadSuccess) {
return mapping.findForward("success");
} else {
return mapping.findForward("error");
}
}
private boolean fileUpload(InputStream isUploadFile, String dirName, String loggedInUser, String fileName){
boolean storeRetVal = false;
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
storeRetVal = SISSFTPManager.getInstance().put(isUploadFile, dirName, fileName);
if (storeRetVal)
{
try {
if (fileType.trim().equalsIgnoreCase("csv")){
ICSAPI.getInstance().getSIMSOrderManager().createFileAudit(loggedInUser, fileName);
} else {
}
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logger.info("BulkUploadAction:fileUpload SFTP Transfer file successfully!");
} else {
logger.error("BulkUploadAction:fileUpload SFTP Transfer file FAILED!");
}
return storeRetVal;
}代码解释:
注意事项:
使用ByteArrayOutputStream和ByteArrayInputStream可以在Java Structs中动态创建CSV文件,而无需在本地磁盘上创建实际文件。这种方法可以提高效率,避免不必要的磁盘操作,并简化代码。但是,需要注意CSV格式化、字符编码和异常处理等问题。
以上就是在Java Structs中动态创建CSV文件并上传至FTP服务器的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号