10 Ocak 2018 Çarşamba

Node.js dersleri 4 - File System, dosyaya yazma, dosyadan okuma işlemleri

9 - File System - How do i write files in node.js

fs.writeFile(filename, data, encoding='utf8', [callback])
Asynchronously writes data to a file, replacing the file if it already exists.  data can be a string or a buffer. The encoding option is ignored if data is a buffer. It defaults to 'utf8'. (Aşağıdaki örnekte görüldüğü gibi, encoding parametresini hiç vermeyip callback fonksiyon parametresini versek de olur. Varolan bir dosyanın üzerine yazmaya çalışırsak bu dosyayı replace ederiz, eski dosyadaki veriler silinir dikkatli olalım bu noktada. 2.parametre string veya buffer olabilir, eğer buffer ise 3. parametre ignore edilir utf8 olduğu düşünülür. )
Example:
fs.writeFile('message.txt', 'Hello Node', function (err) {
 if (err) throw the fucking err;
 console.log('It\'s saved!');
});
Writing to a file is very simple in Node.js. We can use the handy writeFile method inside the standard library's fs module. (Standard kütüphane ile gelen fs modülündeki writeFile veya writeFileSync() method'unu kullanarak bir dosyaya yazabiliriz. )
( Yukarıdaki kodu inceleyelim. Önce fs modülünü include edip bir variable'a assign ederiz. Sonra bu variable'ı kullanarak fs modülündeki writeFile() method'unu çağırırız. Bu method asenkron çalışır. Bu method'un senkron çalışan versiyonu writeFileSync() method'udur. writeFile() method'unun aldığı parametrelere bakalım. 1.parametre'de hangi dosyayı okumak istiyorsak o dosyanın path'ini veririz. 2.parametre'de dosyaya yazmak istediğimiz string'i veya buffer'ı veririz. 1. ve 2. parametre zorunlu, 3. ve 4. parametreler optional'dır. 2. parametrenin yani dosyaya yazılacak string'in veya buffer'ın encoding formatını(utf8,ascii,base64 vs.) belirtmek istiyorsak bunu 3. parametre ile belirtiriz, eğer bir encoding formatı söylemezsek default encoding utf8'dir. 4. parametre callback fonksiyonudur. Eğer dosyaya yazma işlemi başarılı bir şekilde gerçekleştirilirse err null'dır yani err===null doğrudur, dosyaya yazma işleminde bir hata olmuşsa err error mesajını içerir.  )
helloworld.txt dosyasına "Hello World" string'ini yazdırmak için aşağıdaki kodu çalıştırırız. writeFile() method'unun asenkron çalıştığını bu örnekte görebiliriz, çünkü writeFile method'undan sonraki satır önce çalışmış, output'a daha önce yazılmıştır, writeFile() method'unun tamamlanması beklenmemiştir.
If we purposely want to cause an error, we can try to write to a file that we don't have permission to access: writeFile() method'unun hatalı çalışacağı bir örnek yapalım, bu örnekte varolmayan veya erişmeye iznimiz olmayan bir dosyayı okumaya çalıştığımız için error olacaktır.
Note that it is unsafe to use fs.writeFile multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream is strongly recommended.
Note: Specified file descriptors will not be closed automatically.( Bir dosya üzerinde callback fonksiyonunun tamamlanmasını beklemeden writeFile() method'unu birden fazla çağırmak tehlike sonuçlar doğurabilir. Bu senaryo için createWriteStream() method'unun çağırılması önerilir. )
fs.writeFileSync(file, data, encoding='utf8')
The synchronous version of fs.writeFile(). Returns undefined.(writeFile() method'unun senkronize versiyonu writeFileSync() method'udur, bu method 3 tane parametre alır, parametre olarak callback fonksiyonu almaz çünkü senkronize çalışır. )


References:
https://docs.nodejitsu.com/articles/file-system/how-to-write-files-in-nodejs/
https://nodejs.org/docs/v0.4.1/api/fs.html
https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback

10 - How to read files in node.js

Bir dosyanın içeriğini memory'ye okumak için fs modülündeki readFile() ve readFileSync() method'larını kullanırız.
The easiest way to read the entire contents of a file is with fs.readFile, as follows:
Asynchronously reads the entire contents of a file. Example:
fs.readFile('/etc/passwd', (err, data) => {
 if (err) throw err;
 console.log(data);
});
The callback is passed two arguments (err, data), where data is the contents of the file.
If no encoding is specified, then the raw buffer is returned.
If options is a string, then it specifies the encoding. Example:
fs.readFile('/etc/passwd', 'utf8', callback);
Any specified file descriptor has to support reading.
Note: Specified file descriptors will not be closed automatically.
encoding is an optional parameter that specifies the type of encoding to read the file. Possible encodings are 'ascii', 'utf8', and 'base64'. If no encoding is provided, the default is utf8.
callback is a function to call when the file has been read and the contents are ready - it is passed two arguments, error and data. If there is no error, error will be null and data will contain the file contents; otherwise err contains the error message.( Dosya başarılı bir şekilde okunup dosyanın içeriği hazır olduğunda callback fonksiyonu çağırılır. callback fonksiyonu 2 parametre alır. Şu iki case'e göre değer alırlar:
- dosya başarılı bir şekilde okunduysa err null'dır, data dosyanın içeriğini içerir.
- dosya okunurken hata oluştuysa ve dosya okunamadıysa err isimli parametre error mesajını içerir. )
So if we wanted to read /etc/hosts and print it to stdout (just like UNIX cat): /etc/hosts absolute path'indeki dosyayı veya current working directory'deki helloworld.txt dosyayı read edelim(bu dosyaları read etmek için gerekli permission'lara sahip olduğumuzu varsayıyoruz) sonra console'a yazdıralım:
Let's now take a look at an example of what happens when you try to read an invalid file - the easiest example is one that doesn't exist.
Bu örnekte callback fonksiyonunun console.log()'u return edebildiğini de gördük ya daha ne olsun be hacı öğrenmeye devaaaaam!!!
This is a basic Node.js Error object - it can often be useful to log err.stack directly, since this contains a stack trace to the location in code at which the Error object was created.
Read file in synchronously (blocking)
People coming from almost every other programming language and environment will find the synchronous file-reading operation clearer. I am not sure when will you want to use synchronous operations in Node.js, but I see that many of the asynchronous functions have a synchronous counterpart, so there might be a use.
For reading a file you can use the readFileSync method of the fs class:
examples/node/blocking-read-file.js
var fs = require('fs');
var contents = fs.readFileSync('DATA', 'utf8');
console.log(contents);
References :
https://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs/
https://nodejs.org/docs/v0.4.1/api/fs.html

https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback

Hiç yorum yok:

Yorum Gönder