NodeJS Adım 3 – NodeJS I/O

Adım Adım Nodejs yazı dizimizin bir önceki yazısında nodejs uygulamarını nasıl çalıştırabileceğimizi baktık ve ilk uygulamalarımız yazmıştık.

Bu bölümde I/O (Input/Output) işlemlerine yani dosya okuma/yazma işlemlerine değineceğiz. Nodejs’in güçlü olduğu yanlardan bir taneside I/O işlemleridir. Ama I/O işlemlerine geçmeden önce bir kavramdan bahsetmem gerekiyor.

Bir önceki bölümde nodejs üzerinde global olarak kullanabileceğimiz modüller olduğundan bahsetmiştik(process modülü). Bu modüllerden bazıları nodejs çallışırken otomatik olarak yüklenirken (process modülü gibi) bazılarını da bizim kod yazarken çağırmamız gerekiyor. Çağırma işlemi şu şekilde yapılıyor “var m1=require(‘modul1’)” . modul1 modülünü m1 değişkenine atıyoruz. m1 değişkeni ile modul1 modülünün tüm içeriğine erişebiliriz. Bu modüler yapının ayrıntılarına daha sonra değineceğiz. Şimdilik bu kadarı yeterli.

Gelelim konumuza. I/O işlemleri için nodejs içerisinde fs(file system) modülü kullanılmaktadır. Dosyalarla alakalı bir çok işimizi bu modülle yapabiliriz. Bu bölümde yapacağımız ilk örnekte bir dosya okuyup içeriğini ekrana yazdıracağız. Bunun için fs modülünün readFileSync metodunu kullanacağız. Kodlarımız şu şekilde:

// fs modülünü çağırıyoruz
var fs=require("fs");

//dosyamızın yolunu verip içeriğini değişkene atıyoruz
var dosyaIcerigi=fs.readFileSync("D:\\nodejsdersleri\\ornekdosya.txt");

//dosya içeriğimizi ekrana yazdırıyoruz.
console.log(dosyaIcerigi.toString());

Bu kodlar çalıştırdığımızda çıktımız şu şekilde olacak:

3-1-nodeio1

Bir sonraki örnekte dosya ismini konsol üzerinden alacağız. Ve ekrana satır sayısını yazdıracağız. Bunun için ikinci bölümde bahsetmiş olduğumuz process modülünden faydalanacağız. Konsoldan dosya yolunu verirken yolun tamamını yazabileceğimiz gibi sadece çalışan program dosyasına göre yolunuda vere  Satır sayısını almak için ise gelen ifadeyi split metodu ile parçalayacağız. Parçalarken de parametre olarak “\n” ifadesini kullanacağız. “\n” ifadesi text dosyalarında yeni satır anlamına gelir. Yazı editörlerinde biz Enter tuşuna bastığımızda yeni bir satıra geçer ama aslında yaptığı şey arka planda yazının içerisine \n ifadesini eklemektir. Biz programımız içerisinde dosyadan okumuş olduğumuz yazıyı \n ifadelerine göre parçalarsak her bir satırı elde etmiş oluruz. Bunların sayısı da bize satır sayısını verir. Kodlarımızın anlattıklarımıza göre düzenlenmiş hali şu şekilde:

var fs=require("fs");

//Dosya yolunu konsoldan alıyoruz
var dosyaIcerigi=fs.readFileSync(process.argv[2]);

//Elde etmiş olduğumuz yazımızı satırlara ayırıyoruz
var satirlar=dosyaIcerigi.toString().split("\n");

//Satır sayısını ekrana yazdırıyoruz.
console.log(satirlar.length);

Bu kodlar sonucu çıktımız şu şekilde olacaktır:

3-2-nodeio2

Gelelim yazma işlemlerine. Yazma işlemleri içinde yine fs modülünü kullanacağız. fs modülü içerisindeki writeFileSync metodu dosya içerisine yazı yazmamızı sağlamaktadır. Şimdiki örneğimizde konsoldan hem dosya yolunu hemde içerisine ne yazacağımızı alacağız.Ufak bir not: konsol üzerindeki parametreler boşluklarla birbirinden ayrılır. Bizim dosyaya yazdıracağımız yazı boşluk içeriyor ise bu yazıyı konsola parametre olarak yollamak için tırnak içine almamız gerekiyor. Örnek kodlarımız şu şekilde olacak:

var fs=require("fs");

// Dosya ismini ve içeriğini konsoldan alıyoruz
var dosyaAdi=process.argv[2]
var yazi=process.argv[3]

//Dosyamızın içerisine yazımızı yazıyoruz
fs.writeFileSync(dosyaAdi,yazi)

Bu kodları çalıştırdığımızda sonuç şu şekilde olacaktır:

3-3-nodeio3

I/O bölümünde anlatacaklarım bu kadar. Bu bölümde bir dosyayı okumayı, içeriği ile ilgili basit işlemler yapmayı ve dosyaya yazı yazmayı öğrendik. Tabi burada basit text dosyasını okuduk ve onun üzerinde işlemler yaptık. Text dosyası dışında resim, müzik gibi yüzlerce dosya formatı var ve doğal olarak yapıları birbirinden farklı. Bunları işlemek içinde her birinin formatını bilmek gerekir. Yada onlara özel kütüphaneler/modüller kullanarak işlemek gerekir. Bunlarla alakalı bilgi almak için arama motorlarını kullanabilirsiniz.

Makalede kullanılan kodlara buradan ulaşabilirsiniz.

Bir sonraki bölümde asenkron programlamayı öğreneceğiz.