{"id":31010,"date":"2025-10-04T16:41:46","date_gmt":"2025-10-04T13:41:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31010"},"modified":"2025-10-04T16:41:46","modified_gmt":"2025-10-04T13:41:46","slug":"java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/","title":{"rendered":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7"},"content":{"rendered":"<p><body><\/p>\n<h2>Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>Java&#8217;da dosya i\u015flemleri, genellikle <code>InputStream<\/code>, <code>OutputStream<\/code>, <code>Reader<\/code> ve <code>Writer<\/code> gibi ak\u0131\u015f tabanl\u0131 s\u0131n\u0131flar arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilir. Bu s\u0131n\u0131flar, dosyalar\u0131 s\u0131rayla, yani ba\u015ftan sona veya sondan ba\u015fa do\u011fru okuma ve yazma i\u015flemlerinde olduk\u00e7a etkilidir. Ancak, belirli bir dosyan\u0131n ortas\u0131ndaki bir veri blo\u011funa do\u011frudan eri\u015fmek, okumak veya g\u00fcncellemek gerekti\u011finde, ak\u0131\u015f tabanl\u0131 yakla\u015f\u0131mlar yetersiz kal\u0131r. Bu t\u00fcr senaryolarda, t\u00fcm dosyay\u0131 belle\u011fe y\u00fcklemek veya istenen konuma ula\u015fana kadar gereksiz yere okuma yapmak gibi verimsiz \u00e7\u00f6z\u00fcmlere ba\u015fvurmak gerekebilir.<\/p>\n<p>\u0130\u015fte tam bu noktada Java&#8217;n\u0131n <code>java.io.RandomAccessFile<\/code> s\u0131n\u0131f\u0131 devreye girer. <code>RandomAccessFile<\/code>, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, bir dosyan\u0131n herhangi bir konumuna rastgele eri\u015fim sa\u011flayabilen g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu s\u0131n\u0131f, bir dosya \u00fczerinde hem okuma hem de yazma i\u015flemlerini destekler ve dosya i\u015faret\u00e7isi (file pointer) ad\u0131 verilen bir mekanizma ile dosya i\u00e7indeki mevcut konumu y\u00f6netmenize olanak tan\u0131r. Bu sayede, b\u00fcy\u00fck dosyalarla \u00e7al\u0131\u015f\u0131rken veya veritaban\u0131 benzeri yap\u0131lar\u0131 dosya sisteminde tutarken olduk\u00e7a verimli \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<p>Bu makalede, <code>RandomAccessFile<\/code> s\u0131n\u0131f\u0131n\u0131n ne oldu\u011funu, neden kullan\u0131lmas\u0131 gerekti\u011fini, temel yap\u0131c\u0131 metotlar\u0131n\u0131 ve \u00f6nemli metotlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. \u00c7e\u015fitli kullan\u0131m \u00f6rnekleri ile bu s\u0131n\u0131f\u0131n pratik uygulamalar\u0131n\u0131 g\u00f6sterecek, dikkat edilmesi gereken noktalar\u0131 vurgulayacak ve son olarak alternatif teknolojilerle kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 yaparak hangi durumlarda <code>RandomAccessFile<\/code>&#8216;\u0131n en uygun se\u00e7im oldu\u011funu ortaya koyaca\u011f\u0131z.<\/p>\n<h2>RandomAccessFile Nedir?<\/h2>\n<p><code>RandomAccessFile<\/code>, Java&#8217;n\u0131n <code>java.io<\/code> paketinde yer alan, bir dosyan\u0131n hem okunmas\u0131na hem de yaz\u0131lmas\u0131na izin veren bir s\u0131n\u0131ft\u0131r. Geleneksel ak\u0131\u015f s\u0131n\u0131flar\u0131n\u0131n aksine, <code>RandomAccessFile<\/code> bir dosyan\u0131n belirli bir bayt ofsetine do\u011frudan atlama yetene\u011fi sunar. Bu \u00f6zellik, s\u0131n\u0131f\u0131n &#8220;rastgele eri\u015fim&#8221; yetene\u011fini tan\u0131mlar.<\/p>\n<p>Bu s\u0131n\u0131f, <code>DataInput<\/code> ve <code>DataOutput<\/code> aray\u00fczlerini implemente eder. Bu, ilkel veri tiplerini (int, double, boolean, String vb.) do\u011frudan dosyalara yazma ve dosyalardan okuma yetene\u011fine sahip oldu\u011fu anlam\u0131na gelir. <code>RandomAccessFile<\/code> tamamen bayt tabanl\u0131 \u00e7al\u0131\u015f\u0131r ve karakter kodlamas\u0131 gibi konular\u0131 do\u011frudan ele almaz; bu, programc\u0131n\u0131n sorumlulu\u011fundad\u0131r veya <code>readUTF()<\/code>\/<code>writeUTF()<\/code> gibi metotlar Java&#8217;n\u0131n kendi \u00f6zel UTF format\u0131n\u0131 kullan\u0131r.<\/p>\n<p><code>RandomAccessFile<\/code>&#8216;\u0131n en temel \u00f6zelli\u011fi, bir dosya i\u015faret\u00e7isi (file pointer) tutmas\u0131d\u0131r. Bu i\u015faret\u00e7i, dosya i\u00e7indeki mevcut okuma\/yazma konumunu g\u00f6sterir. <code>seek()<\/code> metodu ile bu i\u015faret\u00e7i istenilen herhangi bir konuma ta\u015f\u0131nabilir. Okuma veya yazma i\u015flemleri ger\u00e7ekle\u015ftirildi\u011finde, dosya i\u015faret\u00e7isi otomatik olarak okunan veya yaz\u0131lan bayt say\u0131s\u0131 kadar ilerler. Bu mekanizma, dosyan\u0131n herhangi bir b\u00f6l\u00fcm\u00fcne h\u0131zl\u0131 ve verimli bir \u015fekilde eri\u015fim imkan\u0131 sa\u011flar.<\/p>\n<h2>Neden RandomAccessFile Kullanmal\u0131y\u0131z?<\/h2>\n<p><code>RandomAccessFile<\/code>, belirli senaryolarda di\u011fer dosya I\/O s\u0131n\u0131flar\u0131na g\u00f6re \u00f6nemli avantajlar sunar. \u0130\u015fte bu s\u0131n\u0131f\u0131 kullanmay\u0131 gerektiren ba\u015fl\u0131ca nedenler:<\/p>\n<h3>S\u0131ral\u0131 Eri\u015fim vs. Rastgele Eri\u015fim<\/h3>\n<p><code>FileInputStream<\/code>, <code>FileOutputStream<\/code>, <code>FileReader<\/code>, <code>FileWriter<\/code> gibi s\u0131n\u0131flar veriyi s\u0131ral\u0131 bir \u015fekilde i\u015fler. Yani, bir dosyay\u0131 okumak i\u00e7in ba\u015ftan ba\u015flaman\u0131z ve sonuna kadar ilerlemeniz gerekir. Dosyan\u0131n ortas\u0131ndaki bir veri blo\u011funu de\u011fi\u015ftirmek istedi\u011finizde, genellikle dosyan\u0131n tamam\u0131n\u0131 okuyup, bellekte de\u011fi\u015fiklik yap\u0131p, sonra t\u00fcm dosyay\u0131 ba\u015ftan yazman\u0131z gerekir ki bu b\u00fcy\u00fck dosyalar i\u00e7in son derece verimsizdir. <code>RandomAccessFile<\/code> ise <code>seek(long pos)<\/code> metodu sayesinde dosya i\u015faret\u00e7isini do\u011frudan istedi\u011finiz bayt konumuna ta\u015f\u0131yarak, bu t\u00fcr s\u0131ral\u0131 eri\u015fim k\u0131s\u0131tlamalar\u0131n\u0131 ortadan kald\u0131r\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck dosyalarda belirli kay\u0131tlar\u0131 h\u0131zl\u0131ca bulup g\u00fcncellemek i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h3>Veritaban\u0131 Benzeri Yap\u0131lar<\/h3>\n<p><code>RandomAccessFile<\/code>, sabit boyutlu kay\u0131tlar\u0131n tutuldu\u011fu dosyalar \u00fczerinde veritaban\u0131 benzeri i\u015flemler ger\u00e7ekle\u015ftirmek i\u00e7in idealdir. \u00d6rne\u011fin, her kayd\u0131n (bir \u00f6\u011frenci, bir \u00fcr\u00fcn vb.) belirli bir sabit bayt uzunlu\u011funa sahip oldu\u011fu bir dosya d\u00fc\u015f\u00fcn\u00fcn. <code>RandomAccessFile<\/code> ile, N. kayda do\u011frudan <code>N * RECORD_SIZE<\/code> konumuna atlayarak eri\u015febilir, okuyabilir veya g\u00fcncelleyebilirsiniz. Bu, basit indeksleme sistemleri olu\u015fturmak veya mevcut bir dosya i\u00e7inde belirli bir veriyi aray\u0131p de\u011fi\u015ftirmek i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>Bellek Verimlili\u011fi<\/h3>\n<p>B\u00fcy\u00fck dosyalarla \u00e7al\u0131\u015f\u0131rken, dosyan\u0131n tamam\u0131n\u0131 belle\u011fe y\u00fcklemek sistem kaynaklar\u0131n\u0131 a\u015f\u0131r\u0131 t\u00fcketebilir ve <code>OutOfMemoryError<\/code> hatalar\u0131na yol a\u00e7abilir. <code>RandomAccessFile<\/code>, sadece \u00fczerinde i\u015flem yapt\u0131\u011f\u0131n\u0131z belirli bir b\u00f6l\u00fcm\u00fc okuyup yazarak bellek verimlili\u011fi sa\u011flar. Bu sayede, gigabaytlarca b\u00fcy\u00fckl\u00fc\u011f\u00fcndeki dosyalarla bile etkin bir \u015fekilde \u00e7al\u0131\u015fabilirsiniz.<\/p>\n<h3>E\u015f Zamanl\u0131 Eri\u015fim<\/h3>\n<p>Birden fazla i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131n ayn\u0131 dosyaya e\u015f zamanl\u0131 olarak eri\u015fmesi gerekti\u011finde, <code>RandomAccessFile<\/code>&#8216;\u0131n <code>getChannel()<\/code> metodu arac\u0131l\u0131\u011f\u0131yla elde edilen <code>FileChannel<\/code> nesnesi ve <code>FileLock<\/code> mekanizmas\u0131 kullan\u0131labilir. Bu, dosyan\u0131n belirli b\u00f6lgelerini kilitleyerek veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumaya ve e\u015f zamanl\u0131 eri\u015fim sorunlar\u0131n\u0131 y\u00f6netmeye yard\u0131mc\u0131 olur. Ancak, bu konu <code>RandomAccessFile<\/code>&#8216;\u0131n kendisinin \u00f6tesinde, Java NIO (New I\/O) API&#8217;sine ait ileri d\u00fczey bir konudur ve dikkatli bir \u015fekilde ele al\u0131nmal\u0131d\u0131r.<\/p>\n<h2>RandomAccessFile Yap\u0131c\u0131 Metotlar\u0131<\/h2>\n<p><code>RandomAccessFile<\/code> s\u0131n\u0131f\u0131n\u0131 kullanmak i\u00e7in \u00f6ncelikle bir nesnesini olu\u015fturman\u0131z gerekir. Bu s\u0131n\u0131f\u0131n iki temel yap\u0131c\u0131 metodu bulunur:<\/p>\n<p>*   <code>RandomAccessFile(String name, String mode)<\/code>: Dosyan\u0131n yolunu bir <code>String<\/code> olarak ve eri\u015fim modunu ba\u015fka bir <code>String<\/code> olarak al\u0131r.<br \/>\n*   <code>RandomAccessFile(File file, String mode)<\/code>: Dosyan\u0131n yolunu bir <code>File<\/code> nesnesi olarak ve eri\u015fim modunu bir <code>String<\/code> olarak al\u0131r.<\/p>\n<p>Her iki yap\u0131c\u0131 metotta da <code>mode<\/code> parametresi kritik \u00f6neme sahiptir.<\/p>\n<h3>Mod Parametresi<\/h3>\n<p><code>mode<\/code> parametresi, dosyan\u0131n hangi eri\u015fim izinleriyle a\u00e7\u0131laca\u011f\u0131n\u0131 belirtir:<\/p>\n<p>*   <strong><code>\"r\"<\/code> (read):<\/strong> Dosya sadece okuma modunda a\u00e7\u0131l\u0131r. E\u011fer dosya mevcut de\u011filse, <code>FileNotFoundException<\/code> f\u0131rlat\u0131l\u0131r.<br \/>\n*   <strong><code>\"rw\"<\/code> (read\/write):<\/strong> Dosya hem okuma hem de yazma modunda a\u00e7\u0131l\u0131r. E\u011fer dosya mevcut de\u011filse, otomatik olarak olu\u015fturulur.<br \/>\n*   <strong><code>\"rws\"<\/code> (read\/write synchronous metadata):<\/strong> Dosya okuma ve yazma modunda a\u00e7\u0131l\u0131r. Ayr\u0131ca, dosya i\u00e7eri\u011finin ve dosya meta verilerinin (son de\u011fi\u015ftirilme zaman\u0131, dosya boyutu vb.) diske senkronize olarak yaz\u0131lmas\u0131n\u0131 sa\u011flar. Bu, kritik veriler i\u00e7in veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc art\u0131r\u0131r, ancak performans\u0131 d\u00fc\u015f\u00fcrebilir.<br \/>\n*   <strong><code>\"rwd\"<\/code> (read\/write synchronous data):<\/strong> Dosya okuma ve yazma modunda a\u00e7\u0131l\u0131r. Dosya i\u00e7eri\u011finin diske senkronize olarak yaz\u0131lmas\u0131n\u0131 sa\u011flar, ancak meta veriler i\u00e7in senkronizasyon garantisi vermez. <code>rws<\/code>&#8216;ye g\u00f6re biraz daha iyi performans sunabilirken, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc a\u00e7\u0131s\u0131ndan <code>rws<\/code> kadar g\u00fc\u00e7l\u00fc de\u011fildir.<\/p>\n<p>Genellikle <code>\"rw\"<\/code> modu \u00e7o\u011fu senaryo i\u00e7in yeterlidir. Veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fcn kritik oldu\u011fu ve sistem \u00e7\u00f6kmesi gibi durumlara kar\u015f\u0131 dayan\u0131kl\u0131l\u0131\u011f\u0131n \u00f6nemli oldu\u011fu durumlarda <code>\"rws\"<\/code> veya <code>\"rwd\"<\/code> tercih edilebilir.<\/p>\n<h2>Temel Metotlar<\/h2>\n<p><code>RandomAccessFile<\/code> s\u0131n\u0131f\u0131, dosya \u00fczerinde \u00e7e\u015fitli i\u015flemler yapman\u0131z\u0131 sa\u011flayan zengin bir metot setine sahiptir. Bu metotlar <code>DataInput<\/code> ve <code>DataOutput<\/code> aray\u00fczlerinden miras al\u0131nm\u0131\u015ft\u0131r.<\/p>\n<h3>Dosya \u0130\u015faret\u00e7isi Y\u00f6netimi<\/h3>\n<p>*   <strong><code>seek(long pos)<\/code>:<\/strong> Dosya i\u015faret\u00e7isini belirtilen <code>pos<\/code> (bayt cinsinden) konumuna ta\u015f\u0131r. Bu metot, rastgele eri\u015fimin kalbidir.<br \/>\n*   <strong><code>getFilePointer()<\/code>:<\/strong> Dosya i\u015faret\u00e7isinin mevcut konumunu d\u00f6nd\u00fcr\u00fcr. Bu, bir sonraki okuma veya yazma i\u015fleminin nereden ba\u015flayaca\u011f\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <strong><code>length()<\/code>:<\/strong> Dosyan\u0131n toplam uzunlu\u011funu (bayt cinsinden) d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>setLength(long newLength)<\/code>:<\/strong> Dosyan\u0131n uzunlu\u011funu ayarlar. E\u011fer <code>newLength<\/code> mevcut uzunluktan k\u00fc\u00e7\u00fckse, dosya k\u0131rp\u0131l\u0131r. E\u011fer b\u00fcy\u00fckse, dosya belirtilen uzunlu\u011fa kadar geni\u015fletilir ve yeni eklenen baytlar genellikle s\u0131f\u0131rlarla doldurulur (i\u015fletim sistemine ba\u011fl\u0131 olarak de\u011fi\u015febilir).<\/p>\n<h3>Okuma Metotlar\u0131<\/h3>\n<p><code>RandomAccessFile<\/code>, ilkel veri tiplerini ve bayt dizilerini okumak i\u00e7in \u00e7e\u015fitli metotlar sunar:<br \/>\n*   <strong><code>read()<\/code>:<\/strong> Dosyadan bir bayt okur ve onu <code>int<\/code> olarak d\u00f6nd\u00fcr\u00fcr (0-255 aras\u0131). Dosya sonuna ula\u015f\u0131l\u0131rsa -1 d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>read(byte[] b)<\/code>:<\/strong> Dosyadan <code>b<\/code> dizisinin boyutuna kadar bayt okur ve <code>b<\/code> dizisine depolar. Okunan bayt say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>read(byte[] b, int off, int len)<\/code>:<\/strong> Dosyadan <code>len<\/code> kadar bayt okur ve <code>b<\/code> dizisinin <code>off<\/code> ofsetinden itibaren depolar. Okunan bayt say\u0131s\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>readBoolean()<\/code>:<\/strong> Bir <code>boolean<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readByte()<\/code>:<\/strong> Bir <code>signed byte<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readUnsignedByte()<\/code>:<\/strong> Bir <code>unsigned byte<\/code> de\u011feri okur (0-255 aras\u0131).<br \/>\n*   <strong><code>readChar()<\/code>:<\/strong> \u0130ki baytl\u0131k bir <code>char<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readDouble()<\/code>:<\/strong> Sekiz baytl\u0131k bir <code>double<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readFloat()<\/code>:<\/strong> D\u00f6rt baytl\u0131k bir <code>float<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readInt()<\/code>:<\/strong> D\u00f6rt baytl\u0131k bir <code>int<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readLong()<\/code>:<\/strong> Sekiz baytl\u0131k bir <code>long<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readShort()<\/code>:<\/strong> \u0130ki baytl\u0131k bir <code>signed short<\/code> de\u011feri okur.<br \/>\n*   <strong><code>readUnsignedShort()<\/code>:<\/strong> \u0130ki baytl\u0131k bir <code>unsigned short<\/code> de\u011feri okur (0-65535 aras\u0131).<br \/>\n*   <strong><code>readUTF()<\/code>:<\/strong> Java&#8217;n\u0131n modifiye edilmi\u015f UTF-8 format\u0131nda bir String okur. \u0130lk iki bayt String&#8217;in bayt uzunlu\u011funu belirtir.<\/p>\n<h3>Yazma Metotlar\u0131<\/h3>\n<p>Okuma metotlar\u0131na benzer \u015fekilde, <code>RandomAccessFile<\/code> ilkel veri tiplerini ve bayt dizilerini dosyaya yazmak i\u00e7in de metotlar sunar:<br \/>\n*   <strong><code>write(int b)<\/code>:<\/strong> Bir bayt yazar. Sadece <code>int<\/code> de\u011ferinin en d\u00fc\u015f\u00fck 8 biti kullan\u0131l\u0131r.<br \/>\n*   <strong><code>write(byte[] b)<\/code>:<\/strong> <code>b<\/code> dizisindeki t\u00fcm baytlar\u0131 dosyaya yazar.<br \/>\n*   <strong><code>write(byte[] b, int off, int len)<\/code>:<\/strong> <code>b<\/code> dizisinin <code>off<\/code> ofsetinden ba\u015flayarak <code>len<\/code> kadar bayt\u0131 dosyaya yazar.<br \/>\n*   <strong><code>writeBoolean(boolean v)<\/code>:<\/strong> Bir <code>boolean<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeByte(int v)<\/code>:<\/strong> Bir <code>byte<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeBytes(String s)<\/code>:<\/strong> String&#8217;in her karakterinin d\u00fc\u015f\u00fck 8 bitini bayt olarak yazar. Karakterler 0-255 aral\u0131\u011f\u0131nda olmal\u0131d\u0131r.<br \/>\n*   <strong><code>writeChar(int v)<\/code>:<\/strong> \u0130ki baytl\u0131k bir <code>char<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeChars(String s)<\/code>:<\/strong> String&#8217;in her karakterini iki baytl\u0131k <code>char<\/code> olarak yazar. Bu, sabit boyutlu String alanlar\u0131 i\u00e7in <code>writeUTF()<\/code>&#8216;e g\u00f6re daha uygun olabilir.<br \/>\n*   <strong><code>writeDouble(double v)<\/code>:<\/strong> Sekiz baytl\u0131k bir <code>double<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeFloat(float v)<\/code>:<\/strong> D\u00f6rt baytl\u0131k bir <code>float<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeInt(int v)<\/code>:<\/strong> D\u00f6rt baytl\u0131k bir <code>int<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeLong(long v)<\/code>:<\/strong> Sekiz baytl\u0131k bir <code>long<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeShort(int v)<\/code>:<\/strong> \u0130ki baytl\u0131k bir <code>short<\/code> de\u011feri yazar.<br \/>\n*   <strong><code>writeUTF(String str)<\/code>:<\/strong> Java&#8217;n\u0131n modifiye edilmi\u015f UTF-8 format\u0131nda bir String yazar. \u0130lk iki bayt String&#8217;in bayt uzunlu\u011funu i\u00e7erir, bu nedenle yaz\u0131lan String&#8217;in uzunlu\u011fu de\u011fi\u015fkendir.<\/p>\n<h3><code>close()<\/code> Metodu<\/h3>\n<p>T\u00fcm dosya i\u015flemleri tamamland\u0131\u011f\u0131nda, <code>close()<\/code> metodu \u00e7a\u011fr\u0131larak dosya kayna\u011f\u0131n\u0131n serbest b\u0131rak\u0131lmas\u0131 \u00e7ok \u00f6nemlidir. Bu, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 ve dosya kilitlenme sorunlar\u0131n\u0131 \u00f6nler. Java 7 ve sonraki s\u00fcr\u00fcmlerde <code>try-with-resources<\/code> yap\u0131s\u0131, <code>RandomAccessFile<\/code> gibi <code>AutoCloseable<\/code> aray\u00fcz\u00fcn\u00fc implemente eden s\u0131n\u0131flar i\u00e7in otomatik kapanmay\u0131 sa\u011flar ve hata y\u00f6netimini basitle\u015ftirir.<\/p>\n<h2>RandomAccessFile Kullan\u0131m \u00d6rnekleri<\/h2>\n<p><code>RandomAccessFile<\/code>&#8216;\u0131n yeteneklerini daha iyi anlamak i\u00e7in \u00e7e\u015fitli pratik \u00f6rneklere g\u00f6z atal\u0131m.<\/p>\n<h3>\u00d6rnek 1: Dosyaya Rastgele Veri Yazma ve Okuma<\/h3>\n<p>Bu \u00f6rnek, dosyaya farkl\u0131 t\u00fcrde verileri nas\u0131l yazaca\u011f\u0131m\u0131z\u0131 ve ard\u0131ndan belirli bir konuma atlayarak bu verileri nas\u0131l okuyaca\u011f\u0131m\u0131z\u0131 g\u00f6sterir.<\/p>\n<pre><code class=\"language-java\">import java.io.File;\nimport java.io.IOException;\nimport java.io.RandomAccessFile;\n\npublic class BasicRandomAccessFileExample {\n    private static final String FILE_NAME = \"test_data.dat\";\n\n    public static void main(String[] args) {\n        try (RandomAccessFile raf = new RandomAccessFile(FILE_NAME, \"rw\")) {\n            \/\/ Dosyaya veri yazma\n            raf.writeUTF(\"Merhaba D\u00fcnya!\"); \/\/ UTF String yazar\n            raf.writeInt(12345);            \/\/ Integer yazar\n            raf.writeDouble(3.14159);       \/\/ Double yazar\n\n            System.out.println(\"Veriler dosyaya yaz\u0131ld\u0131.\");\n            System.out.println(\"Dosya i\u015faret\u00e7isi konumu (yazma sonras\u0131): \" + raf.getFilePointer());\n\n            \/\/ Dosya i\u015faret\u00e7isini ba\u015fa ta\u015f\u0131ma\n            raf.seek(0);\n            System.out.println(\"Dosya i\u015faret\u00e7isi ba\u015fa al\u0131nd\u0131: \" + raf.getFilePointer());\n\n            \/\/ Dosyadan veri okuma\n            String message = raf.readUTF();\n            int number = raf.readInt();\n            double pi = raf.readDouble();\n\n            System.out.println(\"Okunan mesaj: \" + message);\n            System.out.println(\"Okunan say\u0131: \" + number);\n            System.out.println(\"Okunan Pi de\u011feri: \" + pi);\n            System.out.println(\"Dosya i\u015faret\u00e7isi konumu (okuma sonras\u0131): \" + raf.getFilePointer());\n\n            \/\/ Belirli bir konuma atlay\u0131p sadece int de\u011ferini okuma\n            \/\/ writeUTF() metodu, string'in ba\u015f\u0131nda 2 baytl\u0131k bir uzunluk bilgisi i\u00e7erir.\n            \/\/ \"Merhaba D\u00fcnya!\" string'i (14 karakter) i\u00e7in UTF-8'de 14 bayt yer kaplar.\n            \/\/ Yani writeUTF(\"Merhaba D\u00fcnya!\") toplam 2 (uzunluk) + 14 (veri) = 16 bayt yer kaplar.\n            \/\/ int de\u011feri ise 4 bayt yer kaplar.\n            \/\/ Dolay\u0131s\u0131yla, int de\u011ferinin ba\u015flang\u0131\u00e7 konumu 16. baytt\u0131r.\n            raf.seek(16); \/\/ Mesaj\u0131 atla, int de\u011ferinin ba\u015flang\u0131c\u0131na git\n            int onlyNumber = raf.readInt();\n            System.out.println(\"Sadece int de\u011ferini okuduk (seek sonras\u0131): \" + onlyNumber);\n\n        } catch (IOException e) {\n            e.printStackTrace();\n        } finally {\n            \/\/ Dosyay\u0131 temizle\n            File file = new File(FILE_NAME);\n            if (file.exists()) {\n                file.delete();\n                System.out.println(\"Test dosyas\u0131 silindi.\");\n            }\n        }\n    }\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>writeUTF()<\/code>, <code>writeInt()<\/code>, <code>writeDouble()<\/code> gibi metotlarla verileri dosyaya yaz\u0131p, ard\u0131ndan <code>seek()<\/code> metoduyla dosya i\u015faret\u00e7isini s\u0131f\u0131rlayarak veya belirli bir konuma ta\u015f\u0131yarak bu verileri <code>readUTF()<\/code>, <code>readInt()<\/code>, <code>readDouble()<\/code> ile okuduk. <code>writeUTF()<\/code>&#8216;in de\u011fi\u015fken uzunluklu yap\u0131s\u0131 nedeniyle, belirli bir veri t\u00fcr\u00fcne atlamak i\u00e7in yaz\u0131lan her veri t\u00fcr\u00fcn\u00fcn bayt uzunlu\u011funu bilmek gerekti\u011fini unutmay\u0131n.<\/p>\n<h3>\u00d6rnek 2: Sabit Boyutlu Kay\u0131tlarla \u00c7al\u0131\u015fma<\/h3>\n<p><code>RandomAccessFile<\/code>&#8216;\u0131n en g\u00fc\u00e7l\u00fc kullan\u0131m alanlar\u0131ndan biri, sabit boyutlu kay\u0131tlar\u0131 depolayan dosyalard\u0131r. Bu sayede, N. kayda do\u011frudan eri\u015filebilir. A\u015fa\u011f\u0131daki \u00f6rnekte, her biri <code>id<\/code>, <code>name<\/code> ve <code>age<\/code> alanlar\u0131na sahip <code>Person<\/code> nesnelerini bir dosyaya yaz\u0131p okuyaca\u011f\u0131z. <code>name<\/code> alan\u0131 i\u00e7in sabit bir uzunluk belirleyerek kay\u0131t boyutunu sabitleyece\u011fiz.<\/p>\n<p>&#8220;`java<br \/>\nimport java.io.File;<br \/>\nimport java.io.IOException;<br \/>\nimport java.io.RandomAccessFile;<br \/>\nimport java.nio.charset.StandardCharsets;<\/p>\n<p>class Person {<br \/>\n    int id;<br \/>\n    String name;<br \/>\n    int age;<\/p>\n<p>    \/\/ Her Person kayd\u0131n\u0131n boyutu (byte cinsinden)<br \/>\n    \/\/ int (4 byte) + 15 chars (her char 2 byte) + int (4 byte) = 4 + 30 + 4 = 38 byte<br \/>\n    public static final int RECORD_SIZE = 4 + (15 * 2) + 4;<br \/>\n    private static final int NAME_LENGTH = 15;<\/p>\n<p>    public Person(int id, String name, int age) {<br \/>\n        this.id = id;<br \/>\n        \/\/ \u0130sim sabit uzunlukta tutulacak. Fazla karakterler kesilir, eksik karakterler bo\u015flukla doldurulur.<br \/>\n        this.name = String.format(&#8220;%-&#8221; + NAME_LENGTH + &#8220;s&#8221;, name).substring(0, NAME_LENGTH);<br \/>\n        this.age = age;<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public String toString() {<br \/>\n        return &#8220;Person{&#8221; +<br \/>\n               &#8220;id=&#8221; + id +<br \/>\n               &#8220;, name='&#8221; + name.trim() + &#8216;\\&#8221; + \/\/ Okurken bo\u015fluklar\u0131 temizlemek i\u00e7in trim()<br \/>\n               &#8220;, age=&#8221; + age +<br \/>\n               &#8216;}&#8217;;<br \/>\n    }<br \/>\n}<\/p>\n<p>public class FixedRecordRandomAccessFileExample {<br \/>\n    private static final String FILE_NAME = &#8220;people_data.dat&#8221;;<\/p>\n<p>    public static void main(String[] args) {<br \/>\n        try (RandomAccessFile raf = new RandomAccessFile(FILE_NAME, &#8220;rw&#8221;)) {<br \/>\n            raf.setLength(0); \/\/ \u00d6nceki verileri temizle<\/p>\n<p>            \/\/ Kay\u0131tlar\u0131 dosyaya yazma<br \/>\n            Person p1 = new Person(1, &#8220;Alice&#8221;, 30);<br \/>\n            Person p2 = new Person(2, &#8220;Bob Smith&#8221;, 25);<br \/>\n            Person p3 = new Person(3, &#8220;Charlie Brown&#8221;, 35);<\/p>\n<p>            writePerson(raf, p1); \/\/ Konum 0<br \/>\n            writePerson(raf, p2); \/\/ Konum 38<br \/>\n            writePerson(raf, p3); \/\/ Konum 76<\/p>\n<p>            System.out.println(&#8220;Kay\u0131tlar dosyaya yaz\u0131ld\u0131.&#8221;);<br \/>\n            System.out.println(&#8220;Dosya uzunlu\u011fu: &#8221; + raf.length() + &#8221; byte.&#8221;);<\/p>\n<p>            \/\/ Belirli bir kayd\u0131 okuma (\u00f6rne\u011fin 2. kay\u0131t &#8211; Bob Smith)<br \/>\n            \/\/ 2. kay\u0131t\u0131n ba\u015flang\u0131\u00e7 konumu: (2 &#8211; 1) <em> RECORD_SIZE = 1 <\/em> 38 = 38<br \/>\n            raf.seek(Person.RECORD_SIZE);<br \/>\n            Person readP2 = readPerson(raf);<br \/>\n            System.out.println(&#8220;Okunan 2. kay\u0131t: &#8221; + readP2);<\/p>\n<p>            \/\/ Belirli bir kayd\u0131 g\u00fcncelleme (\u00f6rne\u011fin 1. kay\u0131t &#8211; Alice&#8217;in ya\u015f\u0131n\u0131 31 yap)<br \/>\n            raf.seek(0); \/\/ 1. kayd\u0131n ba\u015flang\u0131c\u0131<br \/>\n            Person updateP1 = readPerson(raf); \/\/ \u00d6nce oku<br \/>\n            updateP1.age = 31; \/\/ Ya\u015f\u0131 g\u00fcncelle<br \/>\n            raf.seek(0); \/\/ Tekrar 1. kayd\u0131n ba\u015f\u0131na d\u00f6n (yazmak i\u00e7in)<br \/>\n            writePerson(raf, updateP1); \/\/ G\u00fcncellenmi\u015f kayd\u0131 yaz<\/p>\n<p>            System.out.println(&#8220;1. kay\u0131t g\u00fcncellendi.&#8221;);<\/p>\n<p>            \/\/ T\u00fcm kay\u0131tlar\u0131 tekrar oku ve g\u00f6ster<br \/>\n            System.out.println(&#8220;\\nT\u00fcm kay\u0131tlar:&#8221;);<br \/>\n            raf.seek(0); \/\/ Ba\u015fa d\u00f6n<br \/>\n            while (raf.getFilePointer() < raf.length()) {\n                System.out.println(readPerson(raf));\n            }\n\n        } catch (IOException e) {\n            e.printStackTrace();\n        } finally {\n            \/\/ Dosyay\u0131 temizle\n            File file = new File(FILE_NAME);\n            if (file.exists()) {\n                file.delete();\n                System.out.println(\"Test dosyas\u0131 silindi.\");\n            }\n        }\n    }\n\n    \/\/ Person nesnesini dosyaya yazan yard\u0131mc\u0131 metot\n    private static void writePerson(RandomAccessFile raf, Person p) throws IOException {\n        raf.writeInt(p.id);\n        raf.writeChars(p.name); \/\/ 15 karakter * 2 byte = 30 byte\n        raf.\n<\/p>\n","protected":false},"excerpt":{"rendered":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7\nGiri\u015f\nJava&#8217;da dosya i\u015flemleri, genellikle InputStream, OutputStream, Reade","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-31010","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7\" \/>\n<meta property=\"og:description\" content=\"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7 Giri\u015f Java&#039;da dosya i\u015flemleri, genellikle InputStream, OutputStream, Reade\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-04T13:41:46+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7\",\"datePublished\":\"2025-10-04T13:41:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/\"},\"wordCount\":2237,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/\",\"name\":\"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-04T13:41:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/","og_locale":"tr_TR","og_type":"article","og_title":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7","og_description":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7 Giri\u015f Java'da dosya i\u015flemleri, genellikle InputStream, OutputStream, Reade","og_url":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-04T13:41:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7","datePublished":"2025-10-04T13:41:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/"},"wordCount":2237,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/","url":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/","name":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-04T13:41:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/java-randomaccessfile-ornegi-dosya-islemlerinde-guclu-bir-arac\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java RandomAccessFile \u00d6rne\u011fi: Dosya \u0130\u015flemlerinde G\u00fc\u00e7l\u00fc Bir Ara\u00e7"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31010"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31010\/revisions"}],"predecessor-version":[{"id":31011,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31010\/revisions\/31011"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}