Java Programming‎ > ‎Java I/O‎ > ‎

01. Membaca File Byte per Byte

posted Sep 12, 2011, 6:35 AM by Editor KursusInternet   [ updated Oct 4, 2011, 9:58 AM ]

Pendahuluan

Pembacaan file byte per byte (8 bit)  kadang sangat kita perlukan, seperti misalkan pembacaan header file, walaupun tetap masih bisa dilakukan dengan mekanisme buffered streaming.

Untuk melakukan hal tersebut, kita gunakan class FileInputStream. Sedangkan untuk menulis file byte per byte kita gunakan FileOutputStream.

Inisialisasi pembacaan file dilakukan melalui constructor class FileInputStream dengan memasukkan nama file ke dalam constructor tersebut, sebagai berikut :

    FileInputStream objekFileInputStream = new FileInputStream("lokasiFile");

Dan kemudian membacanya secara iteratif sampai selesai menggunakan method read(). Method ini akan mengembalikan data yang terbada dan Jika sudah sampai pada akhir file maka akan mengembalikan nilai -1.

Berikut adalah contoh potongan lengkap kode Java dan hasilnya untuk membaca 7 byte pertama header DBF. Contoh DBF dapat didownload disini.

Contoh Pembacaan File Byte per Byte

package com.kursusinternet.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


public class BacaHeaderDBFByte {

  public static String checkDBFType(char charData)
  {
    String sistemStr = "";
    switch(charData) {
    case 0x02 : sistemStr = "FoxBASE"break;
    case 0x03 : sistemStr = "FoxBASE+/Dbase III plus, no memo"break;
    case 0x30 : sistemStr = "Visual FoxPro"break;
    case 0x31 : sistemStr = "Visual FoxPro, autoincrement enabled"break;
    case 0x32 : sistemStr = "Visual FoxPro with field type Varchar or Varbinary"break;
    case 0x43 : sistemStr = "dBASE IV SQL table files, no memo"break;
    case 0x63 : sistemStr = "dBASE IV SQL system files, no memo"break;
    case 0x83 : sistemStr = "FoxBASE+/dBASE III PLUS, with memo"break;
    case 0x8B : sistemStr = "dBASE IV with memo"break;
    case 0xCB : sistemStr = "dBASE IV SQL table files, with memo"break;
    case 0xF5 : sistemStr = "FoxPro 2.x (or earlier) with memo"break;
    case 0xE5 : sistemStr = "HiPer-Six format with SMT memo file"break;
    case 0xFB : sistemStr = "FoxBASE"break;
    default : sistemStr = "Unknown"break;
    }
    return sistemStr;
  }

  public static String getDataTypeName(byte dataType)
  {
    char C = (chardataType;
    String namaDataType = "";
    switch(C) {
    case 'C' : namaDataType = "Character"break;
    case 'Y' : namaDataType = "Currency"break;
    case 'N' : namaDataType = "Numeric"break;
    case 'F' : namaDataType = "Float"break;
    case 'D' : namaDataType = "Date"break;
    case 'T' : namaDataType = "DateTime"break;
    case 'B' : namaDataType = "Double"break;
    case 'I' : namaDataType = "Integer"break;
    case 'L' : namaDataType = "Logical"break;
    case 'M' : namaDataType = "Memo"break;
    case 'G' : namaDataType = "General"break;
    case 'P' : namaDataType = "Picture"break;
    case '+' : namaDataType = "Autoincrement (dBase Level 7)"break;
    case 'O' : namaDataType = "Double (dBase Level 7)"break;
    case '@' : namaDataType = "Timestamp (dBase Level 7)"break;
    }
    return namaDataType;
  }

  public static void main(String[] args){
    String namaFile = "C:/kursusinternet.com/DBF/MSPRODUK.dbf";
    FileInputStream kiFIS;
    try {
      kiFIS = new FileInputStream(namaFile);
      int karakter;
      int posisiKarakter = 0;
      int jumlahRecord = 0;
      
      while ((karakter = kiFIS.read()) != -&& posisiKarakter<=7) {
        if(posisiKarakter==0System.out.println(checkDBFType((charkarakter));
        else if(posisiKarakter==1System.out.println("Tahun Modifikasi = " (1900+karakter));
        else if(posisiKarakter==2System.out.println("Bulan Modifikasi = " + karakter);
        else if(posisiKarakter==3System.out.println("Hari Modifikasi = " + karakter);
        else if(posisiKarakter >= 4  && posisiKarakter <= 7
          {
            jumlahRecord += (karakter << (posisiKarakter-48);
            if(posisiKarakter==7System.out.println("Jumlah record = " + jumlahRecord);
          }
        
        
        posisiKarakter+=1;
      }
      kiFIS.close();      
    catch (FileNotFoundException e) {
      e.printStackTrace();
    catch (IOException e) {
      e.printStackTrace();
    }      
  }
}

Hasil Output

FoxBASE+/Dbase III plus, no memo
Tahun Modifikasi = 2011
Bulan Modifikasi = 9
Hari Modifikasi = 15
Jumlah record = 45

Referensi

Comments