Wednesday, October 06, 2004

Membuat file CSV

Saya pernah membuat code untuk menghasilkan file CSV (Comma Separated Value) untuk keperluan log. Tools yang saya gunakan adalah tools dari http://ostermiller.org/utils/ package com.Ostermiller.util mempunyai class-class utiliti untuk membuat atau membaca (parsing) file CSV.

Karena saya tidak ingin menggunakan semua utility yang ada package teserbut, yang saya perlukan hanya class untuk membuat file CSV maka saya copy satu file CSVPrinter.java

Menggunakan class CSVPrinter cukup mudah. Ini contoh implementasinya :
public class AuditTrailService(){


...

public OutputStream getCsvBackupFile(OutputStream os, String group) throws CATSException {
//
CSVPrinter p = new CSVPrinter(os);
try {
// Ambil data yang akan di save ke file CSV
ArrayList logs = auditTrailDB.getAllLog(group);
LogAuditTrailTO logAuditTrailTO = null;

// Komentar untuk informasi file CSV
p.printlnComment("BOF");
p.printlnComment("EQ Audit trail backup file @" + (new Date()));
p.printlnComment("");
p.printlnComment("File, group, level, time, username, status, description");

for (int i =0; i < logs.size(); i++) {
logAuditTrailTO = (LogAuditTrailTO) logs.get(i);
p.print(logAuditTrailTO.getFileName());
p.print(logAuditTrailTO.getLogGroup());
p.print(logAuditTrailTO.getLogLevel());
p.print(DateUtil.systemTime2String(logAuditTrailTO.getLogDate()));
p.print(logAuditTrailTO.getUserName());
p.print(logAuditTrailTO.getStatus());
p.println(logAuditTrailTO.getDescription());
}
p.printlnComment("EOF");
return os;
} catch (SQLException e) {
e.printStackTrace();
throw new EQException(999, "Database error. " + e.getMessage());
}
}
}
Dengan contoh method yang yang general terbut kita dapat dengan mudah membuat file CSV atau mengirimkannya ke browser dengan servlet. Dibawah ini contoh penggunaan pada struts action untuk menghasilkan file CSV dengan method tersebut,

public class AuditTrailCSVAction extends Action {

public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {

ActionErrors errors = new ActionErrors();
ActionForward forward = new ActionForward("/");

try {
// Setting header must be done before creating request's output stream
response.setContentType("text/plain");
response.setHeader(
"Content-Disposition",
"attachment;filename=logaudittrail_backup.csv");
OutputStream out = response.getOutputStream();
AuditTrailService auditTrailSvc = new AuditTrailService();
out = auditTrailSvc.getCsvBackupFile(out, "SECURITY");
} catch (Exception e) {
e.printStackTrace();
errors.add("name", new ActionError("error", e.getMessage()));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
}
return null;
}
}
Alternatif tool gratis lain yang bisa digunakan untuk membuat atau membaca file CSV bisa didapat disini. Selain itu, J-Stels Software memiliki utilitas yang lebih bagus untuk file CSV yaitu StelsCSV yang merupakan JDBC type-4 untuk text file, sehingga memanipulasi file text seperti SCV bisa dilakukan seperti manipulasi database dengan JDBC biasa. Bahkan utilitas tersebut sudah memiliki kemampuan JOIN antar file, sayangnya aplikasi terbut tidak gratis.

No comments:

Followers