Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一次几个FileOutputStreams?_Java_Sql - Fatal编程技术网

Java 一次几个FileOutputStreams?

Java 一次几个FileOutputStreams?,java,sql,Java,Sql,情况是: 我有一个包含记录的csv文件(通常为10k,但最多为1m个记录) 我将处理每条记录(非常基本的算法,每个记录有5个基本的select查询到DB) 然后,每个记录(现在已处理)将写入一个文件,但不是每次都写入同一个文件。可以将记录写入另一个文件 基本上我有一个输入文件,但有几个可能的输出文件(大约1-100个可能的输出文件) 这个过程本身是基本的,所以我将重点放在如何处理这些记录上 哪种选择适合这种情况 存储几个代表每个可能输出文件的列表s,然后在最后逐个写入每个列表 为了避免出现几个非

情况是:

  • 我有一个包含记录的csv文件(通常为10k,但最多为1m个记录)
  • 我将处理每条记录(非常基本的算法,每个记录有5个基本的select查询到DB)
  • 然后,每个记录(现在已处理)将写入一个文件,但不是每次都写入同一个文件。可以将记录写入另一个文件
  • 基本上我有一个输入文件,但有几个可能的输出文件(大约1-100个可能的输出文件)

    这个过程本身是基本的,所以我将重点放在如何处理这些记录上

    哪种选择适合这种情况

  • 存储几个代表每个可能输出文件的
    列表
    s,然后在最后逐个写入每个列表
  • 为了避免出现几个非常大的
    列表
    s,每次处理完每条记录后,我都会立即将其写入各自的输出文件。但这需要我一次打开一条小溪

  • 请告诉我这件事。谢谢。

    第二个选项没问题:根据需要创建文件输出流,并尽可能长时间地打开它们(例如,在
    映射中跟踪它们)

    操作系统可能对允许打开多少个文件句柄有限制,但这些数目通常远远超过几百个文件

    第三种选择: 您也可以只附加到文件,
    FileOutputStream
    允许在构造函数中使用该选项:

    new FileOutputStream(File file, boolean append) 
    

    这比保持
    FileOutputStream
    s打开的性能要差,但同样有效。

    您也可以使用1,但写出任何包含N个以上元素的列表:1。阅读,2.过程,3。添加到相关记录列表中,4。检查每个列表(超过N个元素->打开相关输出、写入、关闭输出并清除列表),谢谢您的评论,先生。但我的意思是,我只为每个需要另一个输出文件的记录创建一个列表。所以我不会为每个可能的输出文件创建一个列表,只为每个实际的输出文件创建一个列表。我希望我有道理。你考虑过使用Spring Batch吗@BenoitWickramarachi,是的,我曾经浏览过SpringBatch,但实际上并没有读那么多。我以为春天的那一批有点过分了?如果我错了,请纠正我。不,我不认为这太过分了,您基本上需要执行批处理任务,因此使用为此构建的框架将对您有很大帮助。使用SpringBatch,您可以使用逐块线程并行处理CSV文件,还可以进行错误管理(如果出现任何错误,您可以取消作业(回滚任何更改),或者停止作业,然后在停止的位置继续作业)。只是一些可以做的例子…