- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个对象列表,比如说我从数据库获得的产品列表。我能够使用 openCSV StatefulBeanToCSV writer 将这些列表写入 CSV 文件,以获取 0.5M 记录,将数据写入 CSV 文件需要不到 10 秒的时间。但问题是 StatefulBeanToCSV 将所有这些 0.5M 记录写入单个 CSV 文件,其大小变得更大..所以我需要一种方法将 CSV 文件限制为 20Mb。如果 CSV 文件的大小达到 20mb,我需要 StatefulBeanToCSV 写入新的 CSV 文件。非常感谢任何帮助。
public static void buildProductCsv(final List<Product> product,
final String filePath) {
try {
Writer writer = new FileWriter(filePath);
// mapping of columns with their positions
ColumnPositionMappingStrategy<Product> mappingStrategy = new ColumnPositionMappingStrategy<Product>();
// Set mappingStrategy type to Product Type
mappingStrategy.setType(Product.class);
// Fields in Product Bean
String[] columns = new String[] { "productCode", "MFD", "EXD" };
// Setting the colums for mappingStrategy
mappingStrategy.setColumnMapping(columns);
StatefulBeanToCsvBuilder<Product> builder = new StatefulBeanToCsvBuilder<Product>(writer);
StatefulBeanToCsv<Product> beanWriter = builder.withMappingStrategy(mappingStrategy).build();
// Writing data to csv file
beanWriter.write(product);
writer.close();
log.info("Your csv file has been generated!");
} catch (Exception ex) {
log.warning("Exception: " + ex.getMessage());
}
}
最佳答案
这可能不是最好的方法,但您可以简单地检查一个 Product
对象的大小,然后您就会对可写入的最大子列表大小有一个抽象的想法一份 CSV。然后您可以迭代该列表,创建多个 CSV 文件。
要获取一种产品的尺寸,您可以使用以下方法。请注意,Product
对象应该是可序列化的。
private static long getObjectSize( Object value ) // Pass product here
{
byte[] serializedObject;
ByteArrayOutputStream byteArrayOutputStream = null;
ObjectOutputStream objectOutputStream = null;
try
{
byteArrayOutputStream = new ByteArrayOutputStream();
objectOutputStream = new ObjectOutputStream( byteArrayOutputStream );
objectOutputStream.writeObject( value );
objectOutputStream.flush();
serializedObject = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.flush();
return Math.round( ( double ) serializedObject.length / ( 1024 * 1024 ) ); // Size in MB
}
catch( IOException e )
{
e.printStackTrace();
}
finally
{
try
{
if( byteArrayOutputStream != null )
{
byteArrayOutputStream.close();
}
if( objectOutputStream != null )
{
objectOutputStream.close();
}
}
catch( IOException e )
{
}
}
return 0;
}
关于java - 使用 openCsv StatefulBeanToCSV 限制 CSV 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61284553/
我正在使用 opencsv-4.0 编写 csv 文件,我需要在输出文件中添加列标题。 这是我的代码。 public static void buildProductCsv(final List pr
我正在使用 opencsv-4.0 编写一个 csv 文件,我需要在输出文件中添加列标题。 这是我的代码。 public static void buildProductCsv(final List
这个问题已经有答案了: Limit file size while writing in java (4 个回答) 已关闭 3 年前。 我有一个对象列表,比如说我从数据库获得的产品列表。我能够使用 o
我是一名优秀的程序员,十分优秀!