一.引入文件模块:
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',' hello world',function(err){ if(err){ console.log(err); return; } });
(4)删除文件unlink
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; } })
6.fs操作实例