Node.js 디렉토리에 있는 모든 파일 이름 목록을 가져오려면 어떻게 해야 합니까?

Node.js를 사용하여 디렉토리에 있는 모든 파일 이름 목록을 가져오려고 합니다.파일명이 배열된 출력을 원합니다.이거 어떻게 해?



질문에 대한 답변



또는 메서드를 사용할 수 있습니다. fsNode.js 코어에 포함되어 있기 때문에 아무것도 설치할 필요가 없습니다.

fs.readdir

const testFolder = './tests/'; const fs = require('fs');
fs.readdir(testFolder, (err, files) => {
files.forEach(file => {
console.log(file);
}); }); 

fs.readdirSync

const testFolder = './tests/'; const fs = require('fs');
fs.readdirSync(testFolder).forEach(file => {
console.log(file); }); 

두 방법의 차이점은 첫 번째 방식이 비동기 방식이기 때문에 읽기 프로세스가 종료되었을 때 실행되는 콜백 함수를 제공해야 한다는 점입니다.

두 번째는 동기이며 파일 이름 배열을 반환하지만 읽기 프로세스가 종료될 때까지 코드 실행을 중지합니다.




IMO는 이러한 작업을 수행하는 가장 편리한 방법으로 글로벌 도구를 사용하는 것입니다.이것은 node.js의 글로벌 패키지입니다.인스톨

npm install glob 

그런 다음 와일드카드를 사용하여 파일 이름을 일치시킵니다(예: 패키지의 웹 사이트에서 가져온).

var glob = require("glob")
// options is optional glob("**/*.js", options, function (er, files) {
// files is an array of filenames.
// If the `nonull` option is set, and nothing
// was found, then files is ["**/*.js"]
// er is an error object or null. }) 

globby를 사용하는 경우 현재 폴더 아래에 있는 XML 파일을 찾는 예를 보여 줍니다.

var globby = require('globby');
const paths = await globby("**/*.xml");



그러나 위의 답변은 디렉토리에 대한 재귀 검색을 수행하지 않습니다.재귀 검색을 위해 수행한 작업은 다음과 같습니다(노드 워크 사용:npm install walk)

var walk
= require('walk'); var files
= [];
// Walker options var walker
= walk.walk('./test', { followLinks: false });
walker.on('file', function(root, stat, next) {
// Add this file to the list of files
files.push(root + '/' + stat.name);
next(); });
walker.on('end', function() {
console.log(files); }); 



모든 서브디르에서 파일 가져오기

const fs=require('fs');
function getFiles (dir, files_){
files_ = files_
[];
var files = fs.readdirSync(dir);
for (var i in files){
var name = dir + '/' + files[i];
if (fs.statSync(name).isDirectory()){
 getFiles(name, files_);
} else {
 files_.push(name);
}
}
return files_; }
console.log(getFiles('path/to/dir')) 



Node v10.10.0 에서는, new 를 사용할 수 있습니다.withFileTypes디렉토리내의 파일명을 필터링 하는 기능과 를 조합한 옵션.이것은 다음과 같습니다.

fs.readdirSync('./dirpath', {withFileTypes: true}) .filter(item => !item.isDirectory()) .map(item => item.name) 

반환되는 어레이는 다음 형식입니다.

['file1.txt', 'file2.txt', 'file3.txt']