Node.js ファイル存在確認 (*Node.js File Existence Check*)
Node.jsでファイルの存在を確認する (Node.jsでfsモジュールを使用)
Node.jsでは、ファイルシステムにアクセスするためのfsモジュールを使用します。その中で、ファイルが存在するかを確認する方法はいくつかあります。
**fs.existsSync()**を使用する
最も単純な方法です。ファイルが存在すればtrue
、存在しなければfalse
を返します。
const fs = require('fs');
const filePath = 'myFile.txt';
if (fs.existsSync(filePath)) {
console.log('File exists');
} else {
console.log('File does not exist');
}
**fs.access()**を使用する
fs.access()
はファイルへのアクセス権を確認しますが、ファイルが存在するかどうかも確認できます。
const fs = require('fs');
const filePath = 'myFile.txt';
fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
console.error('File does not exist or is inaccessible');
} else {
console.log('File exists and is accessible');
}
});
**fs.stat()**を使用する
fs.stat()
はファイルの情報を取得します。その中で、ファイルが存在するかどうかも確認できます。
const fs = require('fs');
const filePath = 'myFile.txt';
fs.stat(filePath, (err, stats) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('File does not exist');
} else {
console.error('Error accessing file:', err);
}
} else {
console.log('File exists');
}
});
注意
- ファイルが存在しない場合、**fs.access()とfs.stat()**はエラーを返します。エラーのコードを確認することで、ファイルが存在しないかどうかを判断できます。
- **fs.access()とfs.stat()**はコールバック関数を使用して非同期処理を行います。
- **fs.existsSync()**は同期的な関数です。非同期の処理が必要な場合は、**fs.access()またはfs.stat()**を使用してください。
const fs = require('fs');
const filePath = 'myFile.txt';
if (fs.existsSync(filePath)) {
console.log('ファイルが存在します');
} else {
console.log('ファイルが存在しません');
}
const fs = require('fs');
const filePath = 'myFile.txt';
fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
console.error('ファイルが存在しないか、アクセス権がありません');
} else {
console.log('ファイルが存在し、アクセス可能です');
}
});
const fs = require('fs');
const filePath = 'myFile.txt';
fs.stat(filePath, (err, stats) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('ファイルが存在しません');
} else {
console.error('ファイルへのアクセスエラー:', err);
}
} else {
console.log('ファイルが存在します');
}
});
fs.promisesを使用する
fs.promisesは、fsモジュールの非同期操作をPromiseベースで扱うためのインターフェースです。
const fs = require('fs').promises;
const filePath = 'myFile.txt';
fs.access(filePath, fs.constants.F_OK)
.then(() => {
console.log('ファイルが存在し、アクセス可能です');
})
.catch((err) => {
if (err.code === 'ENOENT') {
console.error('ファイルが存在しません');
} else {
console.error('ファイルへのアクセスエラー:', err);
}
});
async/awaitを使用する
async/awaitは、非同期処理を同期的なコードのように記述するための構文です。
const fs = require('fs').promises;
const filePath = 'myFile.txt';
async function checkFileExists() {
try {
await fs.access(filePath, fs.constants.F_OK);
console.log('ファイルが存在し、アクセス可能です');
} catch (err) {
if (err.code === 'ENOENT') {
console.error('ファイルが存在しません');
} else {
console.error('ファイルへのアクセスエラー:', err);
}
}
}
checkFileExists();
**fs.readFile()**はファイルを読み込みますが、ファイルが存在しない場合はエラーを返します。
const fs = require('fs');
const filePath = 'myFile.txt';
fs.readFile(filePath, (err, data) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('ファイルが存在しません');
} else {
console.error('ファイルへのアクセスエラー:', err);
}
} else {
console.log('ファイルが存在し、読み込みに成功しました');
}
});
- **fs.readFile()**は、ファイルが存在しない場合にエラーを返すため、ファイルの存在確認にも使用できますが、ファイルを読み込む必要がない場合は、**fs.access()やfs.stat()**の方が効率的です。
- fs.promisesとasync/awaitは、非同期処理をより読みやすく管理しやすい方法を提供します。
node.js fs