将结果集写入csv时,printwriter和outputstreamwriter之间的区别

时间:2014-12-10 07:45:16

标签: java csv

我正在使用outputstreamwriter将某些报告的结果集输出写入csv文件。但是csv文件只有100k行,应该是大约600k行。在100k行之后写入csv时数据被截断了吗?我是无法弄清楚可能是什么问题.Googling didint为我提供了任何解决方案。

使用printwriter获取所有600k行是否有意义。

reportData = reportSession.generateAdvancedReport( id, format, displayType, request.getRequestedSessionId(), 0, 0, false,
                     report.getIsDashboardComponent() && report.getDisplayPregeneratedData(), testContextObjectId, testContextObjectName, testContextObjectProp1 );

if( reportData != null )
         {
            for( int i = 0; i < reportData.size(); i ++)
            {
                if( i != 0 )
                    writer.write( "\n" );
                for( int j = 0; j < reportData.get( i ).size(); j++ )
                {
                    writer.write( "\"" );
                    /*
                     * Mantis ID 4468
                     * null check added as it was throwing illegal state exception 
                     */
                    if(reportData.get( i ).get( j ) != null)
                        writer.write( reportData.get( i ).get( j ) );
                    else
                        writer.write( "" );
                    writer.write( "\"" );
                    if( j != reportData.get( i ).size() - 1 )
                        writer.write( "," );
                }
            }
         }

2 个答案:

答案 0 :(得分:0)

  

在100k行之后写入csv时数据是否被截断?

可能不是(IMO)。当然使用PrintWriterOutputStreamWriter的胜利会有所不同。

可能发生了截断,因为你没有close()输出文件(因此,缓冲的数据丢失了),但也可能是假设的& #34;截断&#34;实际上是因为报告包含的数据少于预期。

提示:查看所谓截断文件的结尾。它看起来像是被截断了吗?最后一个字符是双引号吗?

答案 1 :(得分:0)

是的,使用PrintWriter获取所有600k线条非常有意义。

您很可能使用文本查看器/编辑器查看Windows中的输出,该文本查看器/编辑器无法识别* nix行结尾"\n"(仅限换行符)。如果您希望csv文件在Windows中正常运行,请将其更改为结束"\r\n"的Windows行(回车和换行符)。

if( i != 0 )
    writer.write( "\r\n" );