将数据写入到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();
				}
			}
		}
	}

猜你喜欢

转载自m-wen997721750.iteye.com/blog/2100010