注意:在win10,v10.16.1 環(huán)境運(yùn)行無問題
首先引入相關(guān)包(會(huì)在使用處具體說明):
const fs = require('fs')const path = require('path')const child_process = require('child_process')const fsEx = require('fs-extra')/** * @des 該包為實(shí)驗(yàn)性API */const fsPromises = require('fs').promises對(duì)文件的操作
復(fù)制文件
這里列出三種方式:
其中的同步或異步方法可酌情更改,實(shí)現(xiàn)代碼如下
/** * @param { copiedPath: String } (被復(fù)制文件的地址,相對(duì)地址) * @param { resultPath: String } (放置復(fù)制文件的地址,相對(duì)地址) */function copyFile(copiedPath, resultPath) { copiedPath = path.join(__dirname, copiedPath) resultPath = path.join(__dirname, resultPath) try { /** * @des 方式一 */ // fs.writeFileSync(resultPath, fs.readFileSync(copiedPath)) /** * @des 方式二 */ // fs.copyFileSync(copiedPath, resultPath) console.log('success'); } catch (error) { console.log(error); } /** * @des 方式三 */ fsPromises.copyFile(copiedPath, resultPath) .then(() => { console.log('success'); }).catch((err) => { console.log(err); });}刪除文件
使用 unlinkSync 方法,實(shí)現(xiàn)代碼如下
/** * @param { delPath:String } (需要?jiǎng)h除文件的地址) * @param { direct:Boolean } (是否需要處理地址) */function deleteFile(delPath, direct) { delPath = direct ? delPath : path.join(__dirname, delPath) try { /** * @des 判斷文件或文件夾是否存在 */ if (fs.existsSync(delPath)) { fs.unlinkSync(delPath); } else { console.log('inexistence path:', delPath); } } catch (error) { console.log('del error', error); }}對(duì)文件夾(目錄)的操作
以下代碼有引用,復(fù)制文件相關(guān)方法
復(fù)制文件夾
使用了兩種方式:
實(shí)現(xiàn)代碼和釋意如下:
/** * @des 參數(shù)解釋同上 */function copyFolder(copiedPath, resultPath, direct) { if(!direct) { copiedPath = path.join(__dirname, copiedPath) resultPath = path.join(__dirname, resultPath) } function createDir (dirPath) { fs.mkdirSync(dirPath) } if (fs.existsSync(copiedPath)) { createDir(resultPath) /** * @des 方式一:利用子進(jìn)程操作命令行方式 */ // child_process.spawn('cp', ['-r', copiedPath, resultPath]) /** * @des 方式二: */ const files = fs.readdirSync(copiedPath, { withFileTypes: true }); for (let i = 0; i < files.length; i++) { const cf = files[i] const ccp = path.join(copiedPath, cf.name) const crp = path.join(resultPath, cf.name) if (cf.isFile()) { /** * @des 創(chuàng)建文件,使用流的形式可以讀寫大文件 */ const readStream = fs.createReadStream(ccp) const writeStream = fs.createWriteStream(crp) readStream.pipe(writeStream) } else { try { /** * @des 判斷讀(R_OK | W_OK)寫權(quán)限 */ fs.accessSync(path.join(crp, '..'), fs.constants.W_OK) copyFolder(ccp, crp, true) } catch (error) { console.log('folder write error:', error); } } } } else { console.log('do not exist path: ', copiedPath); }}刪除文件夾
遞歸文件和文件夾,逐個(gè)刪除
實(shí)現(xiàn)代碼如下:
function deleteFolder(delPath) { delPath = path.join(__dirname, delPath) try { if (fs.existsSync(delPath)) { const delFn = function (address) { const files = fs.readdirSync(address) for (let i = 0; i < files.length; i++) { const dirPath = path.join(address, files[i]) if (fs.statSync(dirPath).isDirectory()) { delFn(dirPath) } else { deleteFile(dirPath, true) } } /** * @des 只能刪空文件夾 */ fs.rmdirSync(address); } delFn(delPath); } else { console.log('do not exist: ', delPath); } } catch (error) { console.log('del folder error', error); }}執(zhí)行示例
目錄結(jié)構(gòu)
|- index.js(主要執(zhí)行代碼)
|- a
|- a.txt
|- b.txt
|- c
|- a.txt
|- b.txt
|- p
|- a.txt
|- b.txt
根據(jù)傳入的參數(shù)不同,執(zhí)行相應(yīng)的方法
/** * @des 獲取命令行傳遞的參數(shù) */const type = process.argv[2]function execute() { /** * @des 請(qǐng)根據(jù)不同的條件傳遞參數(shù) */ if (type === 'copyFile') { copyFile('./p/a.txt', './c/k.txt') } if (type === 'copyFolder') { copyFolder('./p', './a') } if (type === 'delFile') { deleteFile('./c/ss.txt') } if (type === 'delFolder') { deleteFolder('./a') }}execute()命令行傳參數(shù)
/** * @des 命令行傳參 * 執(zhí)行 node ./xxx/index.js 111 222 * 輸出: * 0: C:/Program Files/nodejs/node.exe * 1: G:/GitHub/xxx/xxxx/index.js * 2: 111 * 3: 222 */process.argv.forEach((val, index) => { console.log(`${index}: ${val}`);});利用 fs-extra 實(shí)現(xiàn)
這是對(duì)fs相關(guān)方法的封裝,使用更簡(jiǎn)單快捷
/** * @des fs-extra 包實(shí)現(xiàn) * api參考: https://github.com/jprichardson/node-fs-extra */function fsExtra() { async function copy() { try { await fsEx.copy(path.join(__dirname + '/p'), path.join(__dirname + '/d')) console.log('success'); } catch (error) { console.log(error); } } copy()}可執(zhí)行源碼: github.com/NameHewei/n…
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注