nodejs模块fs操作文件和文件夹
文章栏目106810680
发布时间:2019-12-06 09:33:50

概述

一.引入文件模块:

const fs = require('fs');

所有的文件系统操作都有异步和同步两种形式。

异步形式的最后一个参数都是完成时回调函数。传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常。 如果操作成功完成,则第一个参数会是 null 或 undefined。

当使用同步操作时,任何异常都会被立即抛出,可以使用 try/catch 来处理异常,或让异常向上冒泡。

二.fs模块常用的一些 API

1.文件操作

(1)读取文件readFile
let fs=require('fs');//1.txt  => Helloween
fs.readFile('1.txt',function(err,data){
    if(err){
        console.log(err);
    }else{
        console.log(data);//<Buffer 48 65 6c 6c 6f 77 65 65 6e>
        console.log(data.toString());//Helloween
    }
});

注:buffer 内容是十六进制信息的 ASCII 码,可以先转换成十进制再对照ASCII表;当然,直接使用toString()转换即可。

(2)写入文件writeFile
fs.writeFile('2.txt', 'xxxxx', function(err){
    if(err){
        console.log(err);
        return;
    }
});

注:文件对象存在则直接把内容写入;文件对象不存在则会自动创建再写入;且写入的内容会直接覆盖原有内容。

(3)追加文件appendFile: 会把内容往文件内的最后内容位置添加进去。
fs.appendFile('2.txt','\r\nhello world',function(err){
    if(err){
        console.log(err);
        return;
    }
});
fs.unlink('2.txt', function(err){
    if(err){
        console.log(err);
        return;
    }
});
(5)复制文件
fs.copyFile(src, dest[, flags], callback)  新增于: v8.5.0,记得查看node版本
fs.copyFile('1.txt','2.txt', function(err){
    if(err){
        console.log(err);
        return;
    }
})

2.文件夹操作

(1)创建文件夹 mkdir
fs.mkdir('./public', function(err){
    if(err){
        console.log(err);
        return;
    }
});
(2)删除文件夹 rmdir
fs.rmdir('./public', function(err){
    if(err){
        console.log(err);
        return;
    }
});
(3)读取文件夹 readdir
fs.readdir('../test', function(err, data){
    if(err){
        console.log(err);
    }else{
        console.log(data);//[ '1.txt', 'fs.js', 'project', 'server.js' ]
    }
});

3.检查文件或文件夹是否存在: fs.access() 、 fs.existsSync()

(1) fs.access(path[, mode], callback)
fs.access('./abc', fs.constants.F_OK, function(err){
    if(err){
        console.log(err);
        return;
    }
    console.log('存在')
});
(2) fs.existsSync(path) 同步,不使用回调。如果路径存在,则返回 true,否则返回 false。
var res = fs.existsSync('./abc');
console.log(res);//false

4. 获取文件或文件夹状态信息

(1)异步获取状态信息 fs.stat(path,callback)

回调有两个参数 (err, stats) 其中 stats 是一个 fs.Stats 对象,可以用来检查对象是文件stats.isFile()还是文件夹stats.isDirectory(),查看它的大小、创建时间、修改时间 … …

fs.stat('./1.txt', function(err, stats){
    //回调有两个参数 (err, stats) 其中 stats 是一个 fs.Stats 对象。
    console.log(stats.isDirectory());//false
    console.log(stats.isFile());//true
    //查看文件的其他信息
    console.log(stats);
    //  Stats {
    //   dev: 275776299,
    //   mode: 33206,
    //   nlink: 1,
    //   uid: 0,
    //   gid: 0,
    //   rdev: 0,
    //   blksize: undefined,
    //   ino: 8444249301415788,
    //   size: 9,
    //   blocks: undefined,
    //   atimeMs: 1526954051821.0154,
    //   mtimeMs: 1526954068932.9944,
    //   ctimeMs: 1526954068932.9944,
    //   birthtimeMs: 1526954051821.0154,
    //   atime: 2018-05-22T01:54:11.821Z,
    //   mtime: 2018-05-22T01:54:28.933Z,
    //   ctime: 2018-05-22T01:54:28.933Z,
    //   birthtime: 2018-05-22T01:54:11.821Z 
    // }
});
(2)同步方式检测状态信息: fs.statSync(path)
var stats = fs.statSync('1.txt');
console.log(stats.isDirectory());//false
console.log(stats.isFile());//true
console.log(stats);
// Stats {
//   dev: 275776299,
//   mode: 33206,
//   nlink: 1,
//   uid: 0,
//   gid: 0,
//   rdev: 0,
//   blksize: undefined,
//   ino: 8444249301415788,
//   size: 9,
//   blocks: undefined,
//   atimeMs: 1526954051821.0154,
//   mtimeMs: 1526954068932.9944,
//   ctimeMs: 1526954068932.9944,
//   birthtimeMs: 1526954051821.0154,
//   atime: 2018-05-22T01:54:11.821Z,
//   mtime: 2018-05-22T01:54:28.933Z,
//   ctime: 2018-05-22T01:54:28.933Z,
//   birthtime: 2018-05-22T01:54:11.821Z 
// }

5.文件或文件夹重命名:fs.rename(oldPath, newPath, callback)

fs.rename('1.txt','1.txt-bak', function(err){
    if(err){
        console.log(err);
        return;
    }
})