Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時環境,它允許開發者使用 JavaScript 編寫服務器端代碼。Node.js 提供了許多內置模塊,其中 fs
模塊是用于與文件系統進行交互的核心模塊之一。fs
模塊提供了豐富的 API,允許開發者進行文件的讀取、寫入、刪除、重命名等操作。本文將詳細介紹 fs
模塊的使用方法,并通過示例代碼幫助讀者更好地理解和掌握這一模塊。
fs
模塊在使用 fs
模塊之前,首先需要引入它。Node.js 中的模塊引入使用 require
函數。
const fs = require('fs');
引入 fs
模塊后,就可以使用它提供的各種方法來進行文件操作了。
fs
模塊提供了 readFileSync
方法,用于同步讀取文件內容。同步讀取意味著代碼會阻塞,直到文件讀取完成。
const data = fs.readFileSync('example.txt', 'utf8');
console.log(data);
在上面的代碼中,readFileSync
方法接收兩個參數:文件路徑和編碼格式。utf8
是常見的編碼格式,表示文件內容以 UTF-8 編碼讀取。讀取完成后,文件內容會存儲在 data
變量中,并通過 console.log
輸出。
與同步讀取不同,異步讀取不會阻塞代碼的執行。fs
模塊提供了 readFile
方法用于異步讀取文件。
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
readFile
方法接收三個參數:文件路徑、編碼格式和回調函數?;卣{函數有兩個參數:err
和 data
。如果讀取過程中發生錯誤,err
會包含錯誤信息;否則,data
會包含文件內容。
fs
模塊提供了 writeFileSync
方法,用于同步寫入文件。
fs.writeFileSync('example.txt', 'Hello, World!', 'utf8');
writeFileSync
方法接收三個參數:文件路徑、要寫入的內容和編碼格式。如果文件不存在,writeFileSync
會創建該文件;如果文件已存在,則會覆蓋原有內容。
異步寫入文件使用 writeFile
方法。
fs.writeFile('example.txt', 'Hello, World!', 'utf8', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File written successfully');
});
writeFile
方法接收四個參數:文件路徑、要寫入的內容、編碼格式和回調函數?;卣{函數只有一個參數 err
,用于處理寫入過程中可能發生的錯誤。
fs
模塊提供了 appendFileSync
方法,用于同步追加內容到文件末尾。
fs.appendFileSync('example.txt', '\nAppended text', 'utf8');
appendFileSync
方法接收三個參數:文件路徑、要追加的內容和編碼格式。如果文件不存在,appendFileSync
會創建該文件。
異步追加文件使用 appendFile
方法。
fs.appendFile('example.txt', '\nAppended text', 'utf8', (err) => {
if (err) {
console.error(err);
return;
}
console.log('Text appended successfully');
});
appendFile
方法接收四個參數:文件路徑、要追加的內容、編碼格式和回調函數?;卣{函數只有一個參數 err
,用于處理追加過程中可能發生的錯誤。
fs
模塊提供了 unlinkSync
方法,用于同步刪除文件。
fs.unlinkSync('example.txt');
unlinkSync
方法接收一個參數:文件路徑。如果文件不存在,unlinkSync
會拋出錯誤。
異步刪除文件使用 unlink
方法。
fs.unlink('example.txt', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File deleted successfully');
});
unlink
方法接收兩個參數:文件路徑和回調函數?;卣{函數只有一個參數 err
,用于處理刪除過程中可能發生的錯誤。
fs
模塊提供了 renameSync
方法,用于同步重命名文件。
fs.renameSync('oldName.txt', 'newName.txt');
renameSync
方法接收兩個參數:舊文件路徑和新文件路徑。如果新文件路徑已存在,renameSync
會覆蓋該文件。
異步重命名文件使用 rename
方法。
fs.rename('oldName.txt', 'newName.txt', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File renamed successfully');
});
rename
方法接收三個參數:舊文件路徑、新文件路徑和回調函數?;卣{函數只有一個參數 err
,用于處理重命名過程中可能發生的錯誤。
fs
模塊提供了 statSync
方法,用于同步獲取文件狀態。
const stats = fs.statSync('example.txt');
console.log(stats.isFile()); // true
console.log(stats.isDirectory()); // false
console.log(stats.size); // 文件大?。ㄗ止潱?
statSync
方法接收一個參數:文件路徑。返回的對象包含文件的各種狀態信息,如文件類型、大小、創建時間等。
異步獲取文件狀態使用 stat
方法。
fs.stat('example.txt', (err, stats) => {
if (err) {
console.error(err);
return;
}
console.log(stats.isFile()); // true
console.log(stats.isDirectory()); // false
console.log(stats.size); // 文件大?。ㄗ止潱?});
stat
方法接收兩個參數:文件路徑和回調函數?;卣{函數有兩個參數:err
和 stats
。stats
對象包含文件的各種狀態信息。
fs
模塊提供了 mkdirSync
方法,用于同步創建目錄。
fs.mkdirSync('newDir');
mkdirSync
方法接收一個參數:目錄路徑。如果目錄已存在,mkdirSync
會拋出錯誤。
異步創建目錄使用 mkdir
方法。
fs.mkdir('newDir', (err) => {
if (err) {
console.error(err);
return;
}
console.log('Directory created successfully');
});
mkdir
方法接收兩個參數:目錄路徑和回調函數?;卣{函數只有一個參數 err
,用于處理創建過程中可能發生的錯誤。
fs
模塊提供了 rmdirSync
方法,用于同步刪除目錄。
fs.rmdirSync('newDir');
rmdirSync
方法接收一個參數:目錄路徑。如果目錄不存在或目錄不為空,rmdirSync
會拋出錯誤。
異步刪除目錄使用 rmdir
方法。
fs.rmdir('newDir', (err) => {
if (err) {
console.error(err);
return;
}
console.log('Directory deleted successfully');
});
rmdir
方法接收兩個參數:目錄路徑和回調函數?;卣{函數只有一個參數 err
,用于處理刪除過程中可能發生的錯誤。
fs
模塊提供了 readdirSync
方法,用于同步讀取目錄內容。
const files = fs.readdirSync('newDir');
console.log(files);
readdirSync
方法接收一個參數:目錄路徑。返回一個包含目錄中所有文件和子目錄名稱的數組。
異步讀取目錄使用 readdir
方法。
fs.readdir('newDir', (err, files) => {
if (err) {
console.error(err);
return;
}
console.log(files);
});
readdir
方法接收兩個參數:目錄路徑和回調函數?;卣{函數有兩個參數:err
和 files
。files
是一個包含目錄中所有文件和子目錄名稱的數組。
fs
模塊還支持流式文件操作,適用于處理大文件或需要逐塊處理文件的場景。
fs
模塊提供了 createReadStream
方法,用于創建可讀流。
const readStream = fs.createReadStream('example.txt', 'utf8');
readStream.on('data', (chunk) => {
console.log(chunk);
});
readStream.on('end', () => {
console.log('File reading completed');
});
readStream.on('error', (err) => {
console.error(err);
});
createReadStream
方法接收兩個參數:文件路徑和編碼格式。返回的可讀流對象可以通過 data
事件逐塊讀取文件內容,通過 end
事件監聽文件讀取完成,通過 error
事件處理讀取過程中可能發生的錯誤。
fs
模塊提供了 createWriteStream
方法,用于創建可寫流。
const writeStream = fs.createWriteStream('output.txt', 'utf8');
writeStream.write('Hello, World!\n');
writeStream.write('Another line\n');
writeStream.end(() => {
console.log('File writing completed');
});
writeStream.on('error', (err) => {
console.error(err);
});
createWriteStream
方法接收兩個參數:文件路徑和編碼格式。返回的可寫流對象可以通過 write
方法逐塊寫入內容,通過 end
方法結束寫入并觸發 finish
事件,通過 error
事件處理寫入過程中可能發生的錯誤。
fs
模塊還支持管道操作,用于將一個可讀流的內容直接傳輸到可寫流中。
const readStream = fs.createReadStream('input.txt', 'utf8');
const writeStream = fs.createWriteStream('output.txt', 'utf8');
readStream.pipe(writeStream);
writeStream.on('finish', () => {
console.log('File copying completed');
});
writeStream.on('error', (err) => {
console.error(err);
});
在上面的代碼中,pipe
方法將 readStream
的內容直接傳輸到 writeStream
中,實現了文件的復制操作。finish
事件在文件復制完成后觸發,error
事件用于處理復制過程中可能發生的錯誤。
fs
模塊提供了 watch
方法,用于監視文件或目錄的變化。
fs.watch('example.txt', (eventType, filename) => {
console.log(`Event type: ${eventType}`);
if (filename) {
console.log(`Filename: ${filename}`);
}
});
watch
方法接收兩個參數:文件或目錄路徑和回調函數?;卣{函數有兩個參數:eventType
和 filename
。eventType
表示發生的事件類型(如 rename
或 change
),filename
表示發生變化的文件名。
fs
模塊提供了 existsSync
方法,用于同步檢查文件或目錄是否存在。
if (fs.existsSync('example.txt')) {
console.log('File exists');
} else {
console.log('File does not exist');
}
existsSync
方法接收一個參數:文件或目錄路徑。返回一個布爾值,表示文件或目錄是否存在。
fs
模塊提供了 copyFileSync
方法,用于同步復制文件。
fs.copyFileSync('source.txt', 'destination.txt');
copyFileSync
方法接收兩個參數:源文件路徑和目標文件路徑。如果目標文件已存在,copyFileSync
會覆蓋該文件。
異步復制文件使用 copyFile
方法。
fs.copyFile('source.txt', 'destination.txt', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File copied successfully');
});
copyFile
方法接收三個參數:源文件路徑、目標文件路徑和回調函數?;卣{函數只有一個參數 err
,用于處理復制過程中可能發生的錯誤。
fs
模塊是 Node.js 中用于與文件系統進行交互的核心模塊之一,提供了豐富的 API 用于文件的讀取、寫入、刪除、重命名等操作。本文詳細介紹了 fs
模塊的常用方法,并通過示例代碼幫助讀者更好地理解和掌握這一模塊。無論是同步操作還是異步操作,fs
模塊都能滿足開發者在文件處理方面的需求。希望本文能對讀者在 Node.js 開發中的文件操作有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。