在Node中使用文件夹的方法

117 阅读2分钟

如何使用Node与文件夹互动

Node.jsfs 核心模块提供了许多方便的方法,你可以用来处理文件夹。

检查一个文件夹是否存在

使用fs.access() ,检查文件夹是否存在,并且Node可以用其权限访问它。

创建一个新的文件夹

使用fs.mkdir()fs.mkdirSync() 来创建一个新的文件夹。

const fs = require('fs')

const folderName = '/Users/flavio/test'

try {
  if (!fs.existsSync(dir)){
    fs.mkdirSync(dir)
  }
} catch (err) {
  console.error(err)
}

读取一个目录的内容

使用fs.readdir()fs.readdirSync 来读取一个目录的内容。

这段代码读取一个文件夹的内容,包括文件和子文件夹,并返回其相对路径。

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

const folderPath = '/Users/flavio'

fs.readdirSync(folderPath)

你可以得到完整的路径。

fs.readdirSync(folderPath).map(fileName => {
  return path.join(folderPath, fileName)
}

你也可以过滤结果,只返回文件,而不包括文件夹。

const isFile = fileName => {
  return fs.lstatSync(fileName).isFile()
}

fs.readdirSync(folderPath).map(fileName => {
  return path.join(folderPath, fileName)
}).filter(isFile)

重命名一个文件夹

使用fs.rename()fs.renameSync() 来重命名文件夹。第一个参数是当前路径,第二个参数是新路径。

const fs = require('fs')

fs.rename('/Users/flavio', '/Users/roger', err => {
  if (err) {
    console.error(err)
    return
  }
  //done
})

fs.renameSync() 是同步版本。

const fs = require('fs')

try {
  fs.renameSync('/Users/flavio', '/Users/roger')
} catch (err) {
  console.error(err)
}

删除一个文件夹

使用fs.rmdir()fs.rmdirSync() 来删除一个文件夹。

删除一个有内容的文件夹可能比你需要的更复杂。

在这种情况下,我建议安装fs-extra 模块,这个模块非常流行,而且维护得很好,它是fs 模块的直接替换,在它的基础上提供了更多的功能。

在这种情况下,remove() 方法才是你想要的。

用以下方法安装它

npm install fs-extra

安装它,并像这样使用它。

const fs = require('fs-extra')

const folder = '/Users/flavio'

fs.remove(folder, err => {
  console.error(err)
})

它也可以和承诺一起使用。

fs.remove(folder).then(() => {
  //done
}).catch(err => {
  console.error(err)
})

或与async/await一起使用。

async function removeFolder(folder) {
  try {
    await fs.remove(folder)
    //done
  } catch (err) {
    console.error(err)
  }
}

const folder = '/Users/flavio'
removeFolder(folder)