應(yīng)用Java泛型和反射導(dǎo)出CSV文件的方法
更新時間:2014年12月18日 08:56:37 投稿:shichen2014
這篇文章主要介紹了應(yīng)用Java泛型和反射導(dǎo)出CSV文件的方法,通過一個自定義函數(shù)結(jié)合泛型與反射的應(yīng)用實現(xiàn)導(dǎo)出CSV文件的功能,具有一定的參考借鑒價值,需要的朋友可以參考下
本文實例講述了應(yīng)用Java泛型和反射導(dǎo)出CSV文件的方法。分享給大家供大家參考。具體如下:
項目中有需求要把數(shù)據(jù)導(dǎo)出為CSV文件,因為不同的類有不同的屬性,為了代碼簡單,應(yīng)用Java的泛型和反射,寫了一個函數(shù),完成導(dǎo)出功能。
復(fù)制代碼 代碼如下:
public <T> void saveFile(List<T> list, String outFile) throws IOException {
if (list == null || list.isEmpty()) {
return;
}
if (StringUtils.isEmpty(outFile)) {
throw new IllegalArgumentException("outfile is null");
}
boolean isFirst = true;
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(outFile));
for (T t : list) {
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
Class clazz = (Class) t.getClass();
Field[] fs = clazz.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field f = fs[i];
f.setAccessible(true);
try {
if (isFirst) {
sb1.append(f.getName());
sb1.append(",");
}
Object val = f.get(t);
if (val == null) {
sb2.append("");
} else {
sb2.append(val.toString());
}
sb2.append(",");
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
if (isFirst) {
out.write(sb1.toString());
isFirst = false;
out.newLine();
}
out.write(sb2.toString());
out.newLine();
}
} catch (IOException e1) {
throw e1;
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e2) {
throw e2;
}
}
}
if (list == null || list.isEmpty()) {
return;
}
if (StringUtils.isEmpty(outFile)) {
throw new IllegalArgumentException("outfile is null");
}
boolean isFirst = true;
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(outFile));
for (T t : list) {
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
Class clazz = (Class) t.getClass();
Field[] fs = clazz.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field f = fs[i];
f.setAccessible(true);
try {
if (isFirst) {
sb1.append(f.getName());
sb1.append(",");
}
Object val = f.get(t);
if (val == null) {
sb2.append("");
} else {
sb2.append(val.toString());
}
sb2.append(",");
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
if (isFirst) {
out.write(sb1.toString());
isFirst = false;
out.newLine();
}
out.write(sb2.toString());
out.newLine();
}
} catch (IOException e1) {
throw e1;
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e2) {
throw e2;
}
}
}
希望本文所述對大家的Java程序設(shè)計有所幫助。
相關(guān)文章
Java kafka如何實現(xiàn)自定義分區(qū)類和攔截器
這篇文章主要介紹了Java kafka如何實現(xiàn)自定義分區(qū)類和攔截器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
Java數(shù)據(jù)導(dǎo)入功能之讀取Excel文件實例
這篇文章主要介紹了Java數(shù)據(jù)導(dǎo)入功能之讀取Excel文件實例,本文給出了jar包的下載地址以及讀取Excel文件的代碼實例,需要的朋友可以參考下2015-06-06
詳解如何給Sprintboot應(yīng)用添加插件機(jī)制
這篇文章主要為大家介紹了如何給 Sprintboot 應(yīng)用添加插件機(jī)制,文中有詳細(xì)的解決方案及示例代碼,具有一定的參考價值,需要的朋友可以參考下2023-08-08

