 |
|
 |
|
Java programlama dilinde kullanılan bir diğer dosya tipi de random (rasgele erişimli ) dosyalardır. Bu dosyaların sıralı dosyalardan farkı erişilmek istenen kayıta, kayıt numarası verilerek erişilebilmesidir. Halbuki sıralı dosyalarda, istenen kayıta ulaşmak için diğer kayıtlar üzerinden kontrol edilerek geçilmesidir, bu da tabii ki zaman kaybına yol açmaktadır.
Aşağıdaki Java programı random dosyaya kayıt girilmesi sırasında kullanılacak metotların tanımladığı kısımlardır. Bu program diğer Java programlarında sınıf olarak kullanılıp, burada tanımlanan metotların diğer programlarda da kullanılması sağlanmıştır. ( Çoban,2000)
kayit.java
Java:
import java.io.*; public class kayit { private int hesap; private String soyisim; private String isim; private double hesaptakipara; public void oku (RandomAccessFile dosya ) throws IOException { hesap=dosya. readInt(); char first []= new char [15]; for(int i= 0;i<first. length;i++ ) {first [i ]=dosya. readChar(); } isim= new String(first ); char last []= new char [15]; for(int i= 0;i<first. length;i++ ) {last [i ]=dosya. readChar(); } soyisim= new String(last ); hesaptakipara=dosya. readDouble(); } public void yaz (RandomAccessFile dosya ) throws IOException { StringBuffer buf; dosya. writeInt(hesap ); if(isim!= null) buf= new StringBuffer(isim ); else buf= new StringBuffer(15); buf. setLength(15); dosya. writeChars(buf. toString()); if(soyisim!= null) buf= new StringBuffer(soyisim ); else buf= new StringBuffer(15); buf. setLength(15); dosya. writeChars(buf. toString()); dosya. writeDouble(hesaptakipara ); } public void yazhesap (int a ){hesap=a; } public int okuhesap (){return hesap; } public void yazisim (String f ){isim=f; } public String okuisim (){return isim; } public void yazsoyisim (String f ){soyisim=f; } public String okusoyisim (){return soyisim; } public void yazhesaptakipara (double b ){hesaptakipara=b; } public double okuhesaptakipara (){return hesaptakipara; } public static int boyut (){return 72; } }
Aşağıdaki program random tipli bir dosyayı bellekte yaratmak için kullanılır. kayit isimli biraz önce tanımladığımız sınıfın import edilip, sahip olduğu metotların kullanıldığına dikkat ediniz.
rasdosyarat.java
Java:
import java.io.*; import java.awt.*; import java.awt.event.*; import kayit; public class rasdosyarat { private kayit hesapdosyasi; private RandomAccessFile girdi; public rasdosyarat () { hesapdosyasi= new kayit (); try{ girdi= new RandomAccessFile("musteri1.dat", "rw"); for(int i= 0;i< 100;i++ ) {hesapdosyasi. yaz(girdi ); } } catch(IOException e ) { System. err. println("Dosya a‡ma hatasn"+e. toString()); System. exit(1); } } public static void main (String args []) { rasdosyarat H= new rasdosyarat (); } }
Aşağıdaki program bir form ara yüzü tanımlanarak random dosyaya bilgi girişi yapılmasını sağlar.
dosyaz.java
Java:
import java.io.*; import java.awt.*; import java.awt.event.*; import kayit; public class dosyaz extends Frame implements ActionListener { private TextField hesapalani,isimalani,soyisimalani,hesaptakiparaalani; private Button birsonraki,kapat; private RandomAccessFile girdi; private kayit hesapdosyasi; public dosyaz () { super ("Dosyaya Yaz"); hesapdosyasi= new kayit (); try { girdi= new RandomAccessFile("musteri1.dat", "rw"); } catch(IOException e ) { System. err. println("Dosya Acma Hatasn"+e. toString()); System. exit(1); } setSize (300, 150); setLayout (new GridLayout(5, 2)); add (new Label("Hesap numarasi")); hesapalani= new TextField(); add (hesapalani ); add (new Label("˜sim")); isimalani= new TextField(20); add (isimalani ); add (new Label("Soyisim")); soyisimalani= new TextField(20); add (soyisimalani ); add (new Label("Hesaptaki Para")); hesaptakiparaalani= new TextField(20); add (hesaptakiparaalani ); birsonraki= new Button("Gir"); birsonraki. addActionListener(this); add (birsonraki ); kapat= new Button("€kŸ"); kapat. addActionListener(this); add (kapat ); setVisible (true); } public void eklekayit () { int accountNumber= 0; Double d; if(!hesapalani. getText(). equals("")) { try { accountNumber= Integer. parseInt(hesapalani. getText()); if(accountNumber<= 100) { hesapdosyasi. yazhesap(accountNumber ); hesapdosyasi. yazisim(isimalani. getText()); hesapdosyasi. yazsoyisim(soyisimalani. getText()); d= new Double(hesaptakiparaalani. getText()); hesapdosyasi. yazhesaptakipara(d. doubleValue()); girdi. seek((long)(accountNumber- 1)*kayit. boyut()); hesapdosyasi. yaz(girdi ); } hesapalani. setText(""); isimalani. setText(""); soyisimalani. setText(""); hesaptakiparaalani. setText(""); } catch(NumberFormatException nfe ) { System. err. println("Hesap numaras tamsay de§iŸken olmal"); } catch(IOException io ) { System. err. println("Dosyaya yazarken hata oluŸtun"+io. toString()); System. exit(1); } } } public void actionPerformed (ActionEvent e ) { eklekayit (); if(e. getSource()==kapat ) { try {girdi. close(); } catch(IOException io ) { System. err. println("Dosya kapatlamadn"+io. toString()); } System. exit(0); } } public static void main (String args []) { new dosyaz (); } }
dosyaz adlı Java programı derlendiğinde random tipli dosyaya veri girişi yapılması sağlayan yukarıdaki form ekrana gelir.
|
 |
 |
|
 |
|
|