一步一步学习Node的File System文件系统

来源:互联网 发布:无人驾驶 数据集 编辑:程序博客网 时间:2024/05/19 05:39
异步删除文件:
unlink:分开、解开、拆开
const fs = require('fs');fs.unlink('./example.js', (err) => {  if (err) throw err;  console.log('successfully deleted /tmp/hello');});



同步删除文件
const fs = require('fs');fs.unlinkSync('./a.js');console.log("delete successfully");




与异步方法相比保证订购。同步方法和异步方法相比之下的话,异步方法是容易出错,请看下例:

const fs = require('fs');fs.rename('./a.js', './world.js', (err) => {  if (err) throw err;  console.log('renamed complete');});fs.stat('./world.js', (err, stats) => {  if (err) throw err;  console.log(`stats: ${JSON.stringify(stats)}`);});
提示找不到world.js文件;


使用同步的方法:
rename:重命名
stat:文件状态
const fs = require('fs');fs.rename('./world.js', './hello.js', (err) => {  if (err) throw err;  fs.stat('./hello.js', (err, stats) => {    if (err) throw err;    console.log(`stats: ${JSON.stringify(stats)}`);  });});



fs检查文件是否存在的方法
/*stats.isFile()
stats.isDirectory()
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isSymbolicLink() (only valid with fs.lstat())
stats.isFIFO()
stats.isSocket()*/

const fs = require('fs');fs.rename('./world.js', './hello.js', (err) => {  if (err) throw err;  fs.stat('./hello.js', (err, stats) => {    if (err) throw err;    console.log(`stats: ${JSON.stringify(stats)}`);  });});


查看文件或目录的变化,可以监测文件的变动情况
文件内容改变了 event:change
文件名改变了: event:rename
const fs = require('fs');fs.watch('./a.js', {encoding: 'buffer'}, (event, filename) => {  if (filename)    console.log(filename);    console.log(event);    // Prints: <Buffer ...>});





fs.access(path[,mode],callback) 检查文件的访问权限

/*fs.F_OK - 文件是对于进程是否可见,可以用来检查文件是否存在。也是mode 的默认值 
fs.R_OK - 文件对于进程是否可读 
fs.W_OK - 文件对于进程是否可写 
fs.X_OK - 文件对于进程是否可执行。(Windows系统不可用,执行效果等同fs.F_OK)
*/

// 对a.js是否有读和写的权限
fs.access('./a.js', fs.R_OK | fs.W_OK, (err) => {  console.log(err ? 'no access!' : 'can read/write');})

fs.appendFile(file, data[, options], callback) 异步的方式向文件中追加数据
/*file:文件名
data:追加的数据
options:可选参数
callbakc操作完文件的回调函数*/

fs.appendFile('./a.js', 'data to append', (err) => {  if (err) throw err;  console.log('The "data to append" was appended to file!');});

fs.appendFileSync(file, data[, options]) 同步的方式追加数据



fs.open(path, flags, [mode], [callback(err,fd)])


以异步的方式打开文件。
在POSIX系统中,path被认为是默认存在的(即使该路径下的文件是不存在的)

flag标识 可能 或 可能不在网络文件系统下运行:
'r' -   以读取模式打开文件。
'r+' - 以读写模式打开文件。
'rs' - 使用同步模式打开并读取文件。指示操作系统忽略本地文件系统缓存。
'rs+' - 以同步的方式打开,读取 并 写入文件。
注意:这不是让fs.open变成同步模式的阻塞操作。如果想要同步模式请使用fs.openSync()。
 
'w' - 以读取模式打开文件,如果文件不存在则创建
'wx' - 和 ' w ' 模式一样,如果文件存在则返回失败
'w+' - 以读写模式打开文件,如果文件不存在则创建
'wx+' - 和 ' w+ ' 模式一样,如果文件存在则返回失败
 
'a' - 以追加模式打开文件,如果文件不存在则创建
'ax' - 和 ' a ' 模式一样,如果文件存在则返回失败
'a+' - 以读取追加模式打开文件,如果文件不存在则创建
'ax+' - 和 ' a+ ' 模式一样,如果文件存在则返回失败
mode    用于创建文件时给文件制定权限,默认0666

fs.open('./aa.js', 'a', function(err, fd) {  if ( err ) {    throw err;  }  console.log(fd);  fs.futimes(fd, 11012349876, 11012349876, function( err ) {    if ( err ) {      throw err;    }    console.log('futimes complete');    fs.close(fd, function(){      console.log('Done');    })  })})

fs.futimes(fd, atime, mtime, callback);
更改一个文件所提供的文件描述符引用的文件的时间戳。
fd:修改的文件
atime:访问的时间 access time
mtime:修改的时间 modify time
callback:回调函数


fs.chmod(path, mode, callback);
该方法以异步的方式来改写文件的读写权限。
操作完成后的回调只接收一个参数,可能会出现异常信息

1. path 文件路径
2. mode 读写权限(如:777)
3. callback 回调

fs.chmodSync(path, mode)
该方法以同步的方式来改写文件的读写权限。


fs.close(fd, [callback(err)])
以异步的方式关闭文件。
fs.closeSync(fd)
以同步的方式关闭文件。

fs.createReadStream('a.js', {start: 90, end: 99});

fs.createWriteStream("a.js", {mode:777});

fs.exists(path, callback)
// 同步文件是否存在

fs.existsSync(path)
// 同步文件是否存在

fs.mkdir(path[, mode], callback)
// 步步创建目录
fs.mkdirSync(path[, mode], callback)
// 同步创建目录

fs.mkdtemp(prefix, callback)
// 创建异步临时目录
fs.mkdtempSync(template)
// 创建同步临时目录



fs.fsync(fd, callback);
同步磁盘缓存。
fs.open('./aa.js', 'a', function(err, fd) {  if (err) {    throw err;  }  fs.fstat(fd, function(err, stats) {    if (err) {      throw err;    }    console.log(stats);  });  fs.fsync(fd, function(err) {    if ( err ) {      throw err;    }    console.log("file closed");  })})

























0 0