Java 一次几个FileOutputStreams?
情况是:Java 一次几个FileOutputStreams?,java,sql,Java,Sql,情况是: 我有一个包含记录的csv文件(通常为10k,但最多为1m个记录) 我将处理每条记录(非常基本的算法,每个记录有5个基本的select查询到DB) 然后,每个记录(现在已处理)将写入一个文件,但不是每次都写入同一个文件。可以将记录写入另一个文件 基本上我有一个输入文件,但有几个可能的输出文件(大约1-100个可能的输出文件) 这个过程本身是基本的,所以我将重点放在如何处理这些记录上 哪种选择适合这种情况 存储几个代表每个可能输出文件的列表s,然后在最后逐个写入每个列表 为了避免出现几个非
列表
s,然后在最后逐个写入每个列表列表
s,每次处理完每条记录后,我都会立即将其写入各自的输出文件。但这需要我一次打开一条小溪请告诉我这件事。谢谢。第二个选项没问题:根据需要创建文件输出流,并尽可能长时间地打开它们(例如,在
映射中跟踪它们)
操作系统可能对允许打开多少个文件句柄有限制,但这些数目通常远远超过几百个文件
第三种选择:
您也可以只附加到文件,FileOutputStream
允许在构造函数中使用该选项:
new FileOutputStream(File file, boolean append)
这比保持FileOutputStream
s打开的性能要差,但同样有效。您也可以使用1,但写出任何包含N个以上元素的列表:1。阅读,2.过程,3。添加到相关记录列表中,4。检查每个列表(超过N个元素->打开相关输出、写入、关闭输出并清除列表),谢谢您的评论,先生。但我的意思是,我只为每个需要另一个输出文件的记录创建一个列表。所以我不会为每个可能的输出文件创建一个列表,只为每个实际的输出文件创建一个列表。我希望我有道理。你考虑过使用Spring Batch吗@BenoitWickramarachi,是的,我曾经浏览过SpringBatch,但实际上并没有读那么多。我以为春天的那一批有点过分了?如果我错了,请纠正我。不,我不认为这太过分了,您基本上需要执行批处理任务,因此使用为此构建的框架将对您有很大帮助。使用SpringBatch,您可以使用逐块线程并行处理CSV文件,还可以进行错误管理(如果出现任何错误,您可以取消作业(回滚任何更改),或者停止作业,然后在停止的位置继续作业)。只是一些可以做的例子…