- Konu sahibi
- #1
JavaScript’te dosya okuma yöntemi kodun çalıştığı ortama bağlıdır: Tarayıcıda kullanıcının seçtiği dosyayı
Tarayıcıdaki bir sayfa, kullanıcının bilgisayarındaki herhangi bir dosyayı yalnızca yolunu yazarak okuyamaz. Aşağıdaki örnekte kullanıcı dosyayı seçer; JavaScript de seçilen ilk dosyanın içeriğini UTF-8 metin olarak alıp sayfada gösterir. Okuma işlemi dosyayı kendiliğinden sunucuya yüklemez.
Aşağıdaki kodu
Örneği denemek için içinde
Hiçbir şey görünmüyorsa dosyanın boş olup olmadığını kontrol edin. Bozuk karakterler görüyorsanız dosyanın kodlamasını kontrol edin:
Node.js kurulu bir ortamda aynı klasöre
Dosya içinde
Hata alırsanız dosya adını ve konumunu kontrol edin; dosya bulunamıyorsa adı veya yolu düzeltin, erişim reddediliyorsa işlemi çalıştıran kullanıcının dosyayı okuma iznini kontrol edin. Bu örnek dosyanın tamamını belleğe alır. Büyük dosyalarda içeriği parça parça işlemek için Node.js tarafında
File.text() ile, Node.js ortamında ise dosya yolunu fs.readFile() işlevine vererek okuyabilirsiniz. Her iki yöntemde de metin içeriğini aldıktan sonra ekranda gösterebilir veya uygulamanızda işleyebilirsiniz.Tarayıcıda kullanıcının seçtiği dosyayı okuma
Tarayıcıdaki bir sayfa, kullanıcının bilgisayarındaki herhangi bir dosyayı yalnızca yolunu yazarak okuyamaz. Aşağıdaki örnekte kullanıcı dosyayı seçer; JavaScript de seçilen ilk dosyanın içeriğini UTF-8 metin olarak alıp sayfada gösterir. Okuma işlemi dosyayı kendiliğinden sunucuya yüklemez.
Aşağıdaki kodu
okuma.html adıyla kaydedin ve tarayıcıda açın:
HTML:
<!doctype html>
<html lang="tr">
<head>
<meta charset="utf-8">
<title>Dosya okuma örneği</title>
</head>
<body>
<label for="dosya">Metin dosyası seçin:</label>
<input id="dosya" type="file" accept=".txt,text/plain">
<pre id="sonuc"></pre>
<script>
const girdi = document.getElementById('dosya');
const sonuc = document.getElementById('sonuc');
girdi.addEventListener('change', async () => {
const dosya = girdi.files[0];
if (!dosya) return;
try {
const metin = await dosya.text();
sonuc.textContent = metin;
} catch (hata) {
sonuc.textContent = 'Dosya okunamadı.';
console.error(hata);
}
});
</script>
</body>
</html>
Örneği denemek için içinde
Merhaba dünya yazan UTF-8 kodlamalı bir metin dosyası oluşturun ve sayfada seçin. Dosyanın içeriği sayfada görünmelidir. await, okuma işlemi tamamlanana kadar sonucu bekler; textContent ise içeriği HTML olarak çalıştırmadan metin şeklinde gösterir.Hiçbir şey görünmüyorsa dosyanın boş olup olmadığını kontrol edin. Bozuk karakterler görüyorsanız dosyanın kodlamasını kontrol edin:
text() içeriği UTF-8 olarak yorumlar. Farklı bir kodlama kullanmanız gerekiyorsa kodlama adı belirtilebilen FileReader.readAsText() yöntemini kullanabilirsiniz. accept seçimi kolaylaştırır; dosyanın gerçekten metin olduğunu güvence altına almaz.Node.js ile dosya yolundan okuma
Node.js kurulu bir ortamda aynı klasöre
ornek.txt adlı UTF-8 metin dosyası ve aşağıdaki oku.js dosyasını kaydedin. Terminalde bu klasöre geçip node oku.js komutunu çalıştırın:
JavaScript:
const { readFile } = require('node:fs/promises');
const { join } = require('node:path');
async function oku() {
try {
const yol = join(__dirname, 'ornek.txt');
const metin = await readFile(yol, 'utf8');
console.log(metin);
} catch (hata) {
console.error('Dosya okunamadı:', hata.message);
}
}
oku();
Dosya içinde
Merhaba dünya varsa terminalde bu metin görünür. __dirname dosya yolunu komutun çalıştırıldığı klasöre değil, oku.js dosyasının bulunduğu klasöre göre kurar. utf8 belirtilmezse readFile() metin yerine baytları içeren bir Buffer döndürür.Hata alırsanız dosya adını ve konumunu kontrol edin; dosya bulunamıyorsa adı veya yolu düzeltin, erişim reddediliyorsa işlemi çalıştıran kullanıcının dosyayı okuma iznini kontrol edin. Bu örnek dosyanın tamamını belleğe alır. Büyük dosyalarda içeriği parça parça işlemek için Node.js tarafında
createReadStream() kullanmak daha uygundur.