3.6. Dosya Sistemi

Node.js’te dosyadan okuma, dosyaya yazma, dosya silme, dizin oluşturma, dizin silme ve vb. işlevleri yerine getirebilmek için “fs” (file system) modülünün eklenmesi gerekir. 

Eşzamanlı – Eşzamansız (Synchronous vs Asynchronous)

fs modülündeki her yöntem eşzamanlı ve eşzamansız durumlara sahiptir. Eşzamanlı metotlar yerine eşzamansız metodları kullanmak daha iyidir çünkü eşzamansız metotlar programın çalışması esnasında programı duraklatmaz ve diğer satırlarda çalışabilir. metin.txt adındaki dosyayı hem eşzamansız hem de eşzamanlı bir şekilde okuyalım.

Eşzamansız okuma bölümünde kod çalışmaya devam eder. Başka bir deyişle program durdurulmaz. Ancak eşzamanlı bölümündeki kod okuma işlemi bitmeden başka bir işlem çalışmaz. Program çıktısı:

Dosya Açma

Bundan sonra eşzamansız metotlar kullanılacaktır. Açma işlemi için aşağıdaki metot kullanılır.

Parametreler:

  • path − Dosya yolu ve dosya ismini içeren bir metin.
  • flags − Dosyanın ne amaçla açıldığını gösteren kısım. (Aşağıda tüm durumlar verilmiştir.)
  • mode − Dosya modunun bitlerle (izinler) ayarlandığı bölüm. Geçerli değeri 0666, okunabilir ve yazılabilir anlamına gelir.
  • callback − Callback fonksiyonu iki argümana (err ve fd) sahiptir.

Flags:

  • r − Okuma modunda dosyayı açma. Dosya yoksa hata döndürülür.
  • r+ − Dosya okuma ve yazma için açılır. Dosya yoksa hata döndürülür.
  • rs  −  Eşzamanlı modda okumak için dosya açılır.
  • rs+  −  Eşzamanlı modda hem okuma hemde yazma için dosya açma.
  • w  − Dosyayı yazma için açma. Dosya yoksa oluşturulur varsa eksisi yerine yeni bir dosya oluşturulur.
  • wx − w’ye benzer ama path var ise hata verir.
  • w+ − Okuma ve yazma için açma. Dosya yoksa oluşturulur varsa eksisi yerine yeni bir dosya oluşturulur.
  • wx+ − w+ gibi ama path bar ise hata verir.
  • a  − Dosyayı ekleme için açar. Dosya yok ise oluşturur.
  • ax  − a gibidir, path yok ise hata verir.
  • a+  − Dosyayı okuma ekleme için açma. Dosya yok ise oluşturur.
  • ax+  − a+ benzer ama path yok ise hata verir.

Bir örnek:

Dosya Bilgisi Alma

Dosya hakkında bilgi almak için iki parametreli aşağıdaki metot kullanılır.

Parametreler:

  • path − Dosya yolu ve dosya ismini içeren bir metin.
  • callback − Callback fonksiyonu iki argümana (err ve fd) sahiptir.

Bu metodun yanında fs.Stats sınıfı içinde dosya hakkında bilgi alabileceğiz ek metotlar vardır.

  • stats.isFile() − Dosya olup olmadığını döndürür.
  • stats.isDirectory() −  Dizin olup olmadığını döndürür.
  • stats.isBlockDevice() − Blok cihazı olup olmadığını döndürür.
  • stats.isCharacterDevice() −  Karakter cihazı olup olmadığını döndürür.
  • stats.isSymbolicLink() − Sembolik bağlantı olup olmadığını döndürür.
  • stats.isFIFO() − FIFO dosya tipi olup olmadığını döndürür.
  • stats.isSocket() −  Soket dosya tipi olup olmadığını döndürür.

Program Çıktısı:

Dosyaya Yazma

Yazma metodu 4 parametre içerir.

  • path − Dosya yolu ve dosya ismini içeren bir metin.
  • data − Dosyaya yazılacak olan String veya buffer’dır.
  • options − Bir nesne olan bu parametre “encoding, mode, flag” ayarlarını tutar. Encoding’in geçerli değeri utf8, mode geçerli değeri 0666 ve flag geçerli değeri “w”dir.
  • callback − Bu callback fonksiyonu sadece yazma hatası olursa hata döndürür.

Dosyayı Okuma

6 parametreye sahip olan okuma metodu aşağıdaki gibidir.

Bu komut parça parça okuma işlemi için uygundur. Eğer tüm dosyayı okumak isterseniz fs.readFile metodunu kullanabilirsiniz.

  • fd −  fs.open() metodundan dönen değer.
  • buffer − Yazılacak verinin buffer’ı.
  • offset − Yazılacak verinin başlangıç noktası.
  • length − Okunacak byte miktarı. (tamsayı)
  • position − Okumaya başlanacak pozisyon değeri. (tamsayı)
  • callback − Bu fonksiyon üç argüman alır, (err, bytesRead, buffer).

Dosya Kapama

fs.read gibi bir işlemden sonra dosya kapatılmalıdır. Bunun için iki parametreli aşağıdaki metot kullanılır.

  • fd − fs.open() açılan dosyadan dönen değer.
  • callback − Bu fonksiyon sadece hata olduğunda bir argüman döndürür. Bu fonksiyonda, işlemin tamamlandığına dair bilgi verilebilir.

Dosya Kesme

Dosyanın belirli bir kısmını kesmek için kullanılır.

  • fd − fs.open() açılan dosyadan dönen değer.
  • len − Kesmeden sonra dosyanın boyutu.
  • callback − Bu fonksiyon sadece hata olduğunda bir argüman döndürür. Bu fonksiyonda, işlemin tamamlandığına dair bilgi verilebilir.

Dosya Silme

Dosya silme işlemi için aşağıdaki metot kullanılır.

  • path − Dosya yolu ve dosya ismini içeren bir metin.
  • callback − Bu fonksiyon sadece hata olduğunda bir argüman döndürür. Bu fonksiyonda, işlemin tamamlandığına dair bilgi verilebilir.

Dizin oluşturma

Dizin oluşturma için aşağıdaki metot kullanılır.

  • path − Dosya yolu ve dosya ismini içeren bir metin.
  • mode − Oluşan dizinin yetkisi ayarlanır. Gecerli degeri 0777’dir.
  • callback − Bu fonksiyon sadece hata olduğunda bir argüman döndürür. Bu fonksiyonda, işlemin tamamlandığına dair bilgi verilebilir.

Dizin İçini Okuma

Dizin içindeki diğer dizinleri ve dosyaları okumak için aşağıdaki metot kullanılır.

  • path − Dizin ismi.
  • callback − Callback fonksiyonundan iki argüman (err, files) döner. err hata için iken files içinde dizinler ve dosyalar bulunur.

Dizin Sil

Dizin silmek için aşağıdaki metot kullanılır.

  • path − Dosya yolu ve dosya ismini içeren bir metin.
  • callback − Bu fonksiyon sadece hata olduğunda bir argüman döndürür. Bu fonksiyonda, işlemin tamamlandığına dair bilgi verilebilir.

Diğer metotlar

Node.js fs modülünden birkaç metodu bu bölümde anlatmaya çalıştım. Ancak, fs modülü içinde çok fazla metot vardır. Bu metotların tümüne Node.js file system dokümanlarından ulaşabilirsiniz. Bu metotlarında girdi ve çıktıları yukarıdaki metotlara benzerlikler göstermektedir.