Berkas csv (coma separated value) sebenarnya merupakan sebuah berkas teks biasa saja, yang membuatnya sedikit spesial adalah karena nilai data yang terdapat di dalamnya dipisahkan oleh sebuah koma (,). Dengan adanya koma ini maka untuk membaca nilai dilakukan dengan membaca berkas tersebut line by line kemudian antar nilai di-split berdasarkan karakter koma tadi.
Tutorial yang saya tulis kali ini akan membahas mengenai cara membaca data teks yang terdapat pada sebuah berkas csv dan bagaimana melakukan konversi data dari data teks tersebut menjadi objek Java. Dengan modal kemampuan dasar ini kita bisa melakukan beberapa hal diantaranya mengimpor berkas csv ke dalam basisdata relasional.
Di bawah adalah sebuah isi dari berkas csv yang digunakan untuk data contoh pada tutorial ini
file : siswa.csv
1 2 3 4 5 |
1,Agung Setiawan, Laki-Laki, Semarang,1992-08-08 2,Acong, Laki-Laki, Palembang, 1988-02-11 3,Bambang Sadewo, Laki-Laki, Semarang,1989-07-20 4,Citra Dewi, Perempuan, Bandung, 1991-09-09 5,Erlang, Perempuan, Surabaya, 1991-10-15 |
Kode Java untuk membaca berkas csv di atas tidak panjang, bisa disimak di bawah ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package com.agungsetiawan.readcsv; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class App { public static void main( String[] args ){ BufferedReader br; String line; try { br=new BufferedReader(new FileReader("src/main/resources/siswa.csv")); while((line=br.readLine())!=null){ String[] siswa=line.split(","); System.out.println("Id:"+siswa[0]+" Nama:"+siswa[1]+" Jenis Kelamin:"+siswa[2]+" Alamat:"+siswa[3]+" Tanggal Lahir:"+siswa[4]); } } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } } |
Seperti sudah saya katakan di atas bahwa untuk membaca nilai pada berkas csv dilakukan dengan membaca isi berkas secara line by line kemudian untuk mendapatkan nilai tinggal memecah masing-masing line menjadi array berdasarkan karakter koma. Proses membaca line by line ditunjukkan oleh baris nomor 15, proses memecah berdasarkan koma terdapat pada baris 17 dan proses menampilkan nilai pada baris 18. Berikut adalah hasil pada konsol
1 2 3 4 5 |
Id:1 Nama:Agung Setiawan Jenis Kelamin: Laki-Laki Alamat: Semarang Tanggal Lahir:1992-08-08 Id:2 Nama:Acong Jenis Kelamin: Laki-Laki Alamat: Palembang Tanggal Lahir: 1988-02-11 Id:3 Nama:Bambang Sadewo Jenis Kelamin: Laki-Laki Alamat: Semarang Tanggal Lahir:1989-07-20 Id:4 Nama:Citra Dewi Jenis Kelamin: Perempuan Alamat: Bandung Tanggal Lahir: 1991-09-09 Id:5 Nama:Erlang Jenis Kelamin: Perempuan Alamat: Surabaya Tanggal Lahir: 1991-10-15 |
Selanjutnya melakukan konversi dari data pada berkas csv menjadi objek Java. Hmm.. kalau langkah pertama sudah bisa seharusnya sudah memiliki gambaran bagaimana caranya karena tidak kalah gampangnya. Pertama buat sebuah kelas Pojo
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.agungsetiawan.readcsv.entity; import java.util.Date; public class Siswa { private int id; private String nama; private String jenisKelamin; private String alamat; private Date tanggalLahir; //getters dan setters } |
Untuk proses konversi sendiri mirip dengan proses membaca tadi, tinggal tambahkan saja objek dari kelas Siswa dan set properti-propertinya dengan nilai array dari hasil pemecahan data teks pada berkas csv. Supaya bisa dibaca lagi nilai-nilainya, masukkan objek-objek siswa pada array list. Sudah bereslah sudah
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package com.agungsetiawan.readcsv; import com.agungsetiawan.readcsv.entity.Siswa; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; public class AppTwo { public static void main( String[] args ) throws ParseException{ BufferedReader br; String line; List<Siswa> listSiswa=new ArrayList<Siswa>(); try { br=new BufferedReader(new FileReader("src/main/resources/siswa.csv")); while((line=br.readLine())!=null){ String[] siswaArray=line.split(","); Siswa siswa=new Siswa(); siswa.setId(Integer.parseInt(siswaArray[0])); siswa.setNama(siswaArray[1]); siswa.setJenisKelamin(siswaArray[2]); siswa.setAlamat(siswaArray[3]); siswa.setTanggalLahir(new SimpleDateFormat("yyyy-MM-dd").parse(siswaArray[4])); listSiswa.add(siswa); } } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } //buat cek data for(Siswa siswa:listSiswa){ System.out.println("Nama:"+siswa.getNama()+" "+new SimpleDateFormat("yyyy-MM-dd").format(siswa.getTanggalLahir())); } } } |
terima kasih kak atas tutorialnya, sangat membantu sekali. tapi ada yang saya tanyakan. jika saya akan menggunakan objek hasil dari konversi untuk digunakan di proses selanjutnya bagaimana ya?
sebelumnya saya membuat manualnya dulu seperti ini.
Scanner sc = new Scanner(System.in);
PedestrianVelocity r= new PedestrianVelocity();
Direction d= new Direction();
CarVelocity cv= new CarVelocity();
Distance ds= new Distance();
TrafficDensity tf = new TrafficDensity();
System.out.println(“++++++++++++++++++++++++++++++++++++++++++”);
System.out.println(” INPUT”);
System.out.println(“++++++++++++++++++++++++++++++++++++++++++”);
System.out.println(“masukkan nilai pedestrian velocity : “);
r.input_pVelocity=sc.nextDouble();
System.out.println(“masukkan nilai direction : “);
d.input_direction=sc.nextDouble();
System.out.println(“masukkan nilai car velocity : “);
cv.input_cVelocity=sc.nextDouble();
System.out.println(“masukkan nilai distance : “);
ds.getDistance=sc.nextDouble();
System.out.println(“masukkan nilai traffic density : “);
tf.input_traffic=sc.nextDouble();
Terima kasih