Dosya Sistemi İşlemleri
Dosya Sistemi İşlemleri, Node.js uygulamalarında verilerin kalıcı olarak saklanması, yönetilmesi ve manipüle edilmesi için temel bir bileşendir. Node.js’in yerleşik fs
modülü, dosya ve dizinlerle etkileşim kurmayı sağlayan kapsamlı bir API sunar. Bu işlemler, dosya oluşturma, okuma, güncelleme ve silme gibi temel fonksiyonları içerir ve uygulamaların performansını, güvenliğini ve ölçeklenebilirliğini doğrudan etkiler.
Node.js geliştiricileri, dosya sistemi işlemlerini hem senkron hem de asenkron olarak gerçekleştirebilirler; ancak asenkron yöntemler event loop’u bloke etmediği için yüksek performanslı ve ölçeklenebilir uygulamalarda tercih edilir. Ayrıca bu işlemler, veri yapıları, algoritmalar ve OOP prensiplerinin uygulanması için ideal senaryolar sunar. Dosya sistemi işlemleri, uygulamaların log yönetimi, kullanıcı veri saklama, geçici dosya işleme ve önbellekleme gibi çeşitli yazılım mimarisi senaryolarında kritik rol oynar.
Bu içerikte, okuyucular temel dosya işlemlerinden başlayarak daha ileri düzey kullanım örneklerine kadar kapsamlı bir öğrenim süreci yaşayacak. Hataların yönetimi, bellek sızıntılarının önlenmesi ve algoritmik verimlilik gibi ileri seviye konulara da değinilecektir. Öğrenim sonunda okuyucular, Node.js projelerinde güvenli, optimize ve sürdürülebilir dosya sistemi operasyonları gerçekleştirebilecek bilgiye sahip olacaklar.
Temel Örnek
text// Temel Dosya Sistemi İşlemleri Örneği
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, 'ornek.txt');
// Dosya oluştur ve veri yaz
fs.writeFile(filePath, 'Node.js ile dosya işlemleri', 'utf8', (err) => {
if (err) {
console.error('Dosya yazılırken hata oluştu:', err);
return;
}
console.log('Dosya başarıyla oluşturuldu.');
// Dosyayı oku
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('Dosya okunurken hata oluştu:', err);
return;
}
console.log('Dosya içeriği:', data);
// Dosyayı sil
fs.unlink(filePath, (err) => {
if (err) {
console.error('Dosya silinirken hata oluştu:', err);
return;
}
console.log('Dosya başarıyla silindi.');
});
});
});
Bu örnek, Node.js’in fs
modülünü kullanarak temel dosya işlemlerini göstermektedir. path
modülü ile dosya yolu güvenli bir şekilde oluşturulmuştur; bu, uygulamaların platformlar arası uyumluluğunu sağlar. fs.writeFile
fonksiyonu, dosya oluşturur ve içerik yazar, fs.readFile
ile dosya okunur ve fs.unlink
ile dosya silinir.
Asenkron callback yapısı, Node.js’in event-driven mimarisiyle uyumludur ve uygulamanın event loop’unu bloke etmeden işlemleri gerçekleştirmesini sağlar. Hata yönetimi, her callback içinde error-first yaklaşımı ile yapılmıştır; bu, uygulamanın beklenmedik çöküşlerden korunmasını sağlar. Bu temel yapı, log dosyaları, kullanıcı veri saklama ve geçici dosya yönetimi gibi gerçek dünya senaryolarında uygulanabilir. Ayrıca, kaynakların doğru yönetimi ve bellek sızıntılarının önlenmesi açısından önemlidir.
Pratik Örnek
text// İleri seviye: Sınıf yapısı ve async/await kullanımı
const fs = require('fs').promises;
const path = require('path');
class DosyaYoneticisi {
constructor(baseDir) {
this.baseDir = baseDir;
}
async olusturDosya(dosyaAdi, icerik) {
try {
const dosyaYolu = path.join(this.baseDir, dosyaAdi);
await fs.writeFile(dosyaYolu, icerik, 'utf8');
console.log(`${dosyaAdi} başarıyla oluşturuldu.`);
} catch (err) {
console.error('Dosya oluşturulurken hata:', err.message);
}
}
async okuDosya(dosyaAdi) {
try {
const dosyaYolu = path.join(this.baseDir, dosyaAdi);
const veri = await fs.readFile(dosyaYolu, 'utf8');
console.log(`${dosyaAdi} içeriği:`, veri);
return veri;
} catch (err) {
console.error('Dosya okunurken hata:', err.message);
}
}
async silDosya(dosyaAdi) {
try {
const dosyaYolu = path.join(this.baseDir, dosyaAdi);
await fs.unlink(dosyaYolu);
console.log(`${dosyaAdi} başarıyla silindi.`);
} catch (err) {
console.error('Dosya silinirken hata:', err.message);
}
}
}
// Kullanım
(async () => {
const yonetici = new DosyaYoneticisi(__dirname);
await yonetici.olusturDosya('test.txt', 'Node.js ile ileri seviye dosya işlemleri');
await yonetici.okuDosya('test.txt');
await yonetici.silDosya('test.txt');
})();
Node.js’de dosya sistemi işlemleri yaparken en iyi uygulamalar, asenkron yöntemlerin tercih edilmesi, OOP prensiplerinin kullanılması ve hataların doğru yönetilmesidir. Yöntemlerin senkron kullanımı event loop’u bloke edeceği için yüksek trafikli uygulamalarda önerilmez.
Olası hatalar, hata yönetiminin yetersiz olması, büyük dosyaların belleğe alınması ve kaynakların serbest bırakılmaması şeklinde görülebilir. Büyük dosya işlemlerinde stream kullanmak performansı artırır ve bellek kullanımını optimize eder. Hata ayıklama için detaylı loglama ve Node.js profiling araçları kullanılabilir. Güvenlik açısından kullanıcıdan alınan dosya yolları her zaman doğrulanmalı ve path traversal gibi saldırılara karşı önlem alınmalıdır. Performans optimizasyonu için sık erişilen verilerin önbelleğe alınması ve gereksiz E/S işlemlerinden kaçınılması önemlidir.
📊 Referans Tablosu
Node.js Element/Concept | Description | Usage Example |
---|---|---|
fs.writeFile | Dosyaya asenkron veri yazar | fs.writeFile('dosya.txt', 'veri', err => {...}) |
fs.readFile | Dosyanın içeriğini asenkron okur | fs.readFile('dosya.txt', 'utf8', (err, data) => {...}) |
fs.unlink | Dosyayı sistemden siler | fs.unlink('dosya.txt', err => {...}) |
fs.promises | Promise tabanlı fs API | await fs.promises.readFile('dosya.txt', 'utf8') |
fs.createReadStream | Büyük dosyaları stream ile okur | const stream = fs.createReadStream('dosya.txt') |
Dosya sistemi işlemleri Node.js uygulamalarında kritik bir beceridir. Temel ve ileri seviye örnekler sayesinde, kullanıcılar dosya oluşturma, okuma ve silme gibi işlemleri güvenli ve optimize bir şekilde gerçekleştirebilir. Bu bilgiler, log yönetimi, veri saklama ve dosya tabanlı önbellekleme gibi geniş bir uygulama alanına doğrudan katkı sağlar.
Sonraki adımlar, stream kullanımı, buffer yönetimi ve dosya güvenliği konularında derinleşmeyi içerir. Öğrencilere tavsiye edilen pratik uygulamalar arasında, basit bir dosya yönetim sistemi, log yöneticisi veya kullanıcı yükleme servisi geliştirmek bulunmaktadır. Bu tür projeler, kavramların pekişmesini sağlar ve gerçek dünya senaryolarına hazırlanmayı destekler. Resmi Node.js dokümantasyonu ve performans optimizasyonu kaynakları, ileri düzey öğrenim için önerilen başlıca kaynaklardır.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek