節點:列出目錄中的文件
簡介
使用文件是任何編程語言的常見任務。文件操作需要我們知道它們的位置。與文件交互的最基本方法之一是列出目錄中的文件。
在本文中,我們將使用 Node.js 和內置的 fs 模塊以及目錄樹 來自 NPM 的模塊,用於列出目錄中的所有文件。
我們將讀取一個目錄,files
,位於我們的 app.js
的同一個地方 文件在:
09/10/2020 01:27 PM 332 app.js
09/10/2020 01:24 PM <DIR> files
該目錄包含:
files
│ anotherDirectory
│ └── fileInDirectory.txt
└── textFile.txt
└── anotherTextFile.txt
目錄樹
directory-tree
是一個方便的 NPM 模塊,它為我們處理這項任務並很好地格式化輸出。首先,讓我們安裝它:
$ npm install directory-tree
現在,讓我們將它導入到我們的腳本中,並提供我們目錄的位置:
const dirTree = require("directory-tree");
const tree = dirTree('./files/');
console.log(tree);
tree
常量現在包含我們想要訪問的信息。此代碼導致:
{
path: './files/',
name: 'files',
children: [
{
path: 'files\\anotherDirectory',
name: 'anotherDirectory',
children: [Array],
size: 8,
type: 'directory'
},
{
path: 'files\\anotherTextFile.txt',
name: 'anotherTextFile.txt',
size: 2218,
extension: '.txt',
type: 'file'
},
{
path: 'files\\textFile.txt',
name: 'textFile.txt',
size: 7,
extension: '.txt',
type: 'file'
}
],
size: 2233,
type: 'directory'
}
我們還可以使用 dirTree()
指定我們想要過濾的擴展名 功能:
const tree = dirTree('./files/', {extensions:/\.js$/});
console.log(tree);
這將返回一個空結果,因為 files
中沒有 JS 文件 目錄。
fs.readdir()
從沒有外部模塊的目錄中讀取文件的最簡單方法是藉助 readdir()
功能。它是異步的,並返回一個包含您指定目錄中文件名的數組。
讓我們繼續列出 files
中的文件 目錄:
const directory = './files/';
const fs = require('fs');
fs.readdir(directory, (err, files) => {
files.forEach(file => {
console.log(file);
});
});
在這裡,我們指定了 directory
常量,指向files
文件夾,之後,我們導入了 fs
模塊。
然後,我們提供了 directory
到 readdir()
函數並通過回調記錄他們的名字。這導致:
anotherDirectory
anotherTextFile.txt
textFile.txt
textFile.txt - Shortcut.lnk
注意: readdir()
函數也讀取目錄,但沒有指示它是目錄還是文件。在這種情況下,沒有擴展名的文件看起來與目錄相同。
但是,我們可以使用 fs.lstatSync()
功能來幫助我們解決這個問題:
const directory = './files/';
const path = require('path');
const fs = require('fs');
fs.readdir(directory, (err, files) => {
files.forEach(file => {
if (fs.lstatSync(path.resolve(directory, file)).isDirectory()) {
console.log('Directory: ' + file);
} else {
console.log('File: ' + file);
}
});
});
使用 isDirectory()
,我們已經檢查了我們在給定路徑遇到的是目錄還是文件。這現在導致:
免費電子書:Git Essentials
查看我們的 Git 學習實踐指南,其中包含最佳實踐、行業認可的標準以及隨附的備忘單。停止谷歌搜索 Git 命令並真正學習 它!
Directory: anotherDirectory
File: anotherTextFile.txt
File: file
File: textFile.txt
fs.readdirSync()
readdirSync()
功能與 readdir()
幾乎相同 函數,但它是同步讀取的,而不是異步的。
它的工作方式與之前的方法完全相同——它只是同步處理操作:
const directory = './files/';
const path = require('path');
const fs = require('fs');
fs.readdirSync(directory).forEach(file => {
if (fs.lstatSync(path.resolve(directory, file)).isDirectory()) {
console.log('Directory: ' + file);
} else {
console.log('File: ' + file);
}
});
在這裡,我們做了和以前一樣的事情。檢查文件和目錄,根據結果稍微改變流程。這段代碼打印出來:
Directory: anotherDirectory
File: anotherTextFile.txt
File: file
File: textFile.txt
結論
在本文中,我們介紹了幾種在 Node.js 中列出目錄中文件的方法 我們從 directory-tree
開始 , 一個為此目的而構建的 NPM 包,之後我們使用了內置的 fs
模塊及其readdir()
和 readdirSync()
列出文件的函數。