将数据写入到CSV文件

/***
	 * 生成csv文件
	 * 
	 * @param context
	 * @param list
	 *            对象集合
	 * @param csvName
	 *            对应的文件名称
	 * @param propertyArray
	 *            属性字符串,逗号分割
	 */
	public static void writeCsvFile(Context context, List list, String csvName,
			String folder, String propertyArray) {
		if (list == null || list.isEmpty())
			return;

		// sdcard/com/cela/目录下
		String path = DataUtils.getCsvFilePath(folder);
		File file = new File(path);
		if (!file.exists()) {
			file.mkdirs();
		}
		path += csvName;

		// 判断文件是否存在,如果存在则取出原有数据
		List<String[]> originalList = null;
		try {
			File f = new File(path);
			if (f.exists()) {
				originalList = new ArrayList<String[]>();
				CSVReader reader = new CSVReader(new FileReader(path), ',');
				originalList.addAll(reader.readAll());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		OutputStreamWriter fw = null;
		CSVWriter csv = null;
		// 通过反射获取list里面的值
		try {
			fw = new OutputStreamWriter(new FileOutputStream(path), "UTF-8");
			csv = new CSVWriter(fw, ',');
			final int size = list.size();
			// 写入原有数据
			if (originalList != null && !originalList.isEmpty()) {
				final int len = originalList.size();
				for (int i = 0; i < len; i++) {
					csv.writeNext(originalList.get(i));
				}
			}
			// 开始写入对象
			for (int i = 0; i < size; i++) {
				Object obj = list.get(i);
				Class cla = obj.getClass();
				String[] propertys = propertyArray.split(",");
				String[] values = new String[propertys.length];
				for (int j = 0; j < propertys.length; j++) {
					Field field = cla.getDeclaredField(propertys[j]);
					String fname = field.getName();
					String strLitter = fname.substring(0, 1).toUpperCase();

					String getName = "get" + strLitter + fname.substring(1);
					String setName = "set" + strLitter + fname.substring(1);

					Method getmethod = cla.getMethod(getName, new Class[] {});
					cla.getMethod(setName, new Class[] { field.getType() });

					Object value = getmethod.invoke(obj, new Object[] {});
					if(value!=null){
						values[j] = (String) value.toString();
					}else{
						values[j] = "";
					}
				}
				csv.writeNext(values);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (csv != null) {
				try {
					csv.flush();
					csv.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值