search
HomeWeb Front-endFront-end Q&Anodejs implements selecting folder

Node.js is a popular back-end JavaScript programming language that is widely used to build web applications, APIs, command line tools, etc. In Node.js, sometimes you need to let users select folders to read, write, and modify in the program. This article will introduce how to use Node.js to select a folder.

1. Use native Node.js to implement folder selection

Node.js provides the fs module to operate the file system. In the fs module, there is a method called readdir, which can read all files and subdirectories in a directory. The following is a code example that uses native Node.js to select a folder:

const fs = require('fs');
const path = require('path');

let dir = process.argv[2] || '.';

fs.readdir(dir, (err, files) => {
  if (err) throw err;
  console.log('请选择一个文件夹:');
  files.forEach(file => {
    let filePath = path.join(dir, file);
    fs.stat(filePath, (err, stats) => {
      if (err) throw err;
      if (stats.isDirectory()) {
        console.log(`[${file}]`);
      } else {
        console.log(file);
      }
    });
  });
  process.stdin.resume();
  process.stdin.setEncoding('utf8');
  process.stdin.on('data', data => {
    data = data.trim();
    let filePath = path.join(dir, data);
    fs.stat(filePath, (err, stats) => {
      if (err) throw err;
      if (stats.isDirectory()) {
        process.stdin.pause();
        console.log(`已选择[${data}]文件夹!`);
      } else {
        console.log(`${data}不是一个有效的文件夹!`);
      }
    });
  });
});

The code first uses the fs.readdir method to read the user-specified folder, and then uses the fs.stat method to determine whether each file is Not a folder. Finally, process.stdin is used to obtain the user's input. If the user input is a folder, it means that the user selected the folder.

2. Use third-party modules to select folders

In addition to using native Node.js, you can also use third-party modules to select folders. Here are two common third-party modules for selecting folders.

  1. inquirer

inquirer is a powerful interactive command line user interface library that can create interactive selections on the command line just like developing web forms. The following is a code example that uses inquirer to select a folder:

const inquirer = require('inquirer');
const fs = require('fs');
const path = require('path');

let dirs = fs
  .readdirSync('.')
  .filter(file => {
    return fs.statSync(file).isDirectory();
  })
  .map(dir => {
    return { name: `[${dir}]`, value: dir };
  });

inquirer
  .prompt([
    {
      type: 'list',
      name: 'dir',
      message: '请选择一个文件夹:',
      choices: dirs,
    },
  ])
  .then(answer => {
    console.log(`已选择[${answer.dir}]文件夹!`);
  });

This code uses the fs.readdirSync method to read all folders in the current directory, and uses the filter method to filter out all folders. Then each folder is encapsulated into an object through the map method, so that the folder name can be displayed in the inquirer's selection list. Finally, use the inquirer.prompt method to pop up a selection list to let the user select a folder, and use answer.dir to get the name of the folder selected by the user.

  1. file-tree-select

file-tree-select is a file selector plugin built on inquirer and node-file-tree. It can display the file tree in the current directory on the command line, and users can select folders through the up and down arrows and space bar of the keyboard. The following is a code example that uses file-tree-select to select a folder:

const fileTreeSelect = require('file-tree-select');
const path = require('path');

let dir = process.argv[2] || '.';
let absDir = path.resolve(dir);

fileTreeSelect(absDir, { hideFiles: true }).then(result => {
  console.log(`已选择[${result}]文件夹!`);
});

This code first uses the path.resolve method to resolve the folder name entered by the user into an absolute path. Then use the fileTreeSelect method to display the file tree in the current directory, and the user can use keyboard operations to select the folder. Finally, use the .then method to get the folder path selected by the user.

3. Summary

Selecting a folder is a common operation in Node.js. This article introduces three ways to select folders using native Node.js, inquirer and file-tree-select. For small projects, using native Node.js can meet the needs; for large projects, using third-party modules can improve development efficiency and code quality.

The above is the detailed content of nodejs implements selecting folder. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What is useEffect? How do you use it to perform side effects?What is useEffect? How do you use it to perform side effects?Mar 19, 2025 pm 03:58 PM

The article discusses useEffect in React, a hook for managing side effects like data fetching and DOM manipulation in functional components. It explains usage, common side effects, and cleanup to prevent issues like memory leaks.

Explain the concept of lazy loading.Explain the concept of lazy loading.Mar 13, 2025 pm 07:47 PM

Lazy loading delays loading of content until needed, improving web performance and user experience by reducing initial load times and server load.

What are higher-order functions in JavaScript, and how can they be used to write more concise and reusable code?What are higher-order functions in JavaScript, and how can they be used to write more concise and reusable code?Mar 18, 2025 pm 01:44 PM

Higher-order functions in JavaScript enhance code conciseness, reusability, modularity, and performance through abstraction, common patterns, and optimization techniques.

How does currying work in JavaScript, and what are its benefits?How does currying work in JavaScript, and what are its benefits?Mar 18, 2025 pm 01:45 PM

The article discusses currying in JavaScript, a technique transforming multi-argument functions into single-argument function sequences. It explores currying's implementation, benefits like partial application, and practical uses, enhancing code read

How does the React reconciliation algorithm work?How does the React reconciliation algorithm work?Mar 18, 2025 pm 01:58 PM

The article explains React's reconciliation algorithm, which efficiently updates the DOM by comparing Virtual DOM trees. It discusses performance benefits, optimization techniques, and impacts on user experience.Character count: 159

How do you prevent default behavior in event handlers?How do you prevent default behavior in event handlers?Mar 19, 2025 pm 04:10 PM

Article discusses preventing default behavior in event handlers using preventDefault() method, its benefits like enhanced user experience, and potential issues like accessibility concerns.

What is useContext? How do you use it to share state between components?What is useContext? How do you use it to share state between components?Mar 19, 2025 pm 03:59 PM

The article explains useContext in React, which simplifies state management by avoiding prop drilling. It discusses benefits like centralized state and performance improvements through reduced re-renders.

What are the advantages and disadvantages of controlled and uncontrolled components?What are the advantages and disadvantages of controlled and uncontrolled components?Mar 19, 2025 pm 04:16 PM

The article discusses the advantages and disadvantages of controlled and uncontrolled components in React, focusing on aspects like predictability, performance, and use cases. It advises on factors to consider when choosing between them.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools