JavaScript >> Javascript 文檔 >  >> JavaScript

節點:列出目錄中的文件

簡介

使用文件是任何編程語言的常見任務。文件操作需要我們知道它們的位置。與文件交互的最基本方法之一是列出目錄中的文件。

在本文中,我們將使用 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 模塊。

然後,我們提供了 directoryreaddir() 函數並通過回調記錄他們的名字。這導致:

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() 列出文件的函數。


Tutorial JavaScript 教程
  1. 第 9 天 - 100 天代碼

  2. Shadow DOM 插槽,組合

  3. Docker 簡而言之:一個強大的容器平台

  4. 如何在 Gatsby 中獲取當前頁面 URL

  5. 模態形式:模態和 Formik

  6. JavaScript 對像中鍵查找的性能

  7. 在 Javascript 中使用不同類型的 FOR LOOP 在數組中循環的方法。

  1. jQuery AJAX – 在本地主機上使用 XAMPP 時不接收 JSON 數據

  2. 使用 JavaScript 進行本機表單驗證

  3. Uncaught TypeError:Object (...) is not a function

  4. 撲熱息痛.js💊| #34:解釋這段 JavaScript 代碼

  5. 將樣式附加到 DOM 不替換現有

  6. 將多個過濾器應用於數組javascript

  7. 近似 PI

  1. 創建一個 PHP 和 CSS3 支持的 About 頁面

  2. 使用 NodeJS 和 Socket.io 的區塊鏈

  3. 模擬網速慢的 Chrome:關於 Chrome DevTools 你可能不知道的事

  4. 你一直想要但不知道的 React CLI