Node.js学习笔记——对文件或目录执行的其他操作

Node.js学习笔记——对文件或目录执行的其他操作

      • 创建目录
          • fs.mkdir(path,[mode],callback)
          • fs.readdir(path,callback)
      • 查看与修改文件或目录的信息
          • fs.stat(path,callback)/fs.lstat(path,callback)
      • 检查文件或目录是否存在
          • fs.exists(path,callback)
      • 获取文件或目录的绝对路径
          • fs.realpath(path,[cache],callback)
      • 修改文件访问时间及修改时间
          • fs.utimes(path,atime,mtime,callback)
          • 另外一种方法:
      • 修改文件或目录的读写权限
          • fs.chmod(path,mode,callback)
          • 另外一种方法:fs.fchmod(path,mode,callback)
      • 其它操作
        • 移动文件:fs.rename(oldPath,newPath,callback)
        • 硬链接:fs.link(srcpath,dstpatgth,callback)
        • 删除硬链接:fs.unlink(path,callback)
        • 创建符号链接fs.symlink(oldPath,newPath,[type],callback)
        • 读取符号链接中所包含的另一个文件或目录路径fs.symlink(path,callback)
        • 截断文件(首先清除文件内容,然后修改文件尺寸的操作)fs.truncate(filename,len,callback)
          • 另一种ftruncate(fd,len,callback)
        • 删除空目录fs.rmdir(path,callback)
        • 监视文件或目录fs.watchFile(filename,[option],listener)
        • 取消watchFile:fs.unwatchFile(filename,[option],listener)
        • 使用watch

创建目录

fs.mkdir(path,[mode],callback)

mode默认为0777,即任何人可以读写该目录

var fs=require('fs');
fs.mkdir('./directory',function (err) {
    if(err)console.log('failed');
    else console.log('ok');
})
fs.readdir(path,callback)
var fs=require('fs');
fs.readdir('./',function (err,files) {
    if(err)console.log('failed');
    else console.log(files);
})
//显示所有文件名

查看与修改文件或目录的信息

fs.stat(path,callback)/fs.lstat(path,callback)

区别:查看符号链接文件的信息时必须用后者
说明:path指定需要被查看的文件或目录的完整路径及文件名或目录名
callback:functioin(err,stats){}
stats:是一个fs.Stats对象
有以下方法:

  • isFile方法:判断是否文件
  • isDirectory方法:目录
  • isSymbolicLink方法:判断是否为一个符号链接文件

  • 有以下属性:
    mode:权限标志
    nlink:文件或目录的硬链接数量
    size:文件尺寸
    atime:文件的访问时间
    mtime:修改时间
    ctime:创建时间
var fs=require('fs');
fs.stat('./hello.txt',function (err,stats) {
    console.log(stats);
})

检查文件或目录是否存在

fs.exists(path,callback)

callback:function(exists){} exists为true/false

var fs=require('fs');
fs.exists('./hello.txt',function (hh) {
    if(hh)console.log('yes');
    else console.log('no');
})

获取文件或目录的绝对路径

fs.realpath(path,[cache],callback)

callback:function(err,path){}path指绝对路径
cache:一个对象,其中存放了一些预先指定的路径。例如在如下的代码中,使用"private/etc"来指定path参数值中"/etc"字符串所指向的路径。

var cache={'etc':'/private/etc/'};
fs.realpath('etc/passwd',cache,function(err,path){});

实例:

var fs=require('fs');
var data;
fs.realpath('./hello1.txt',function (err,path) {
    if(err)console.log('failed');
    else console.log(path);  
    data=path;
})

修改文件访问时间及修改时间

fs.utimes(path,atime,mtime,callback)

atime:指定修改后的访问时间
mtime:指定修改后的时间

var fs=require('fs');
fs.utimes('./hello1.txt',new Date(),new Date(),function (err) {
    if(err)console.log('error');
    else console.log('yes');
})
另外一种方法:

fs.futimes(path,atime,mtime,callback)

var fs=require('fs');
fs.open('./hello1.txt','w+',function (err,fd) {
    if(err)throw err;
    fs.futimes(fd,new Date(),new Date(),function (err) {
        if(err)console.log('no');
        console.log('yes');
        
    });
})

修改文件或目录的读写权限

fs.chmod(path,mode,callback)

mode指定修改后的权限
callback参数只有error

另外一种方法:fs.fchmod(path,mode,callback)

同上面类似

其它操作

移动文件:fs.rename(oldPath,newPath,callback)
var fs=require('fs');
var oldOne='./directory/hello.txt';
var newOne='./hello2.txt';
fs.rename(newOne,oldOne,function(err){
    if(err)console.log('fail');
    else console.log('yes');
})
硬链接:fs.link(srcpath,dstpatgth,callback)

类似于新建引用

var fs=require('fs');
var oldOne='./directory/hello.txt';
var newOne='./hello2.txt';
fs.link(oldOne,newOne,function(err){
    if(err)console.log('fail');
    else console.log('yes');
})
删除硬链接:fs.unlink(path,callback)

把所有硬链接都删了就等于把文件删了把(?)

var fs=require('fs');
var oldOne='./directory/hello.txt';
var newOne='./hello2.txt';
fs.unlink(newOne,function(err){
    if(err)console.log('fail');
    else console.log('yes');
})
创建符号链接fs.symlink(oldPath,newPath,[type],callback)

类似于指针

  • callback只返回err
  • type:file为文件 dir/junction为目录
var fs=require('fs');
var forErr =function (err) {
    if(err) throw err;
    else console.log('passed');
};
fs.symlink('./a','./bb','dir',forErr)
读取符号链接中所包含的另一个文件或目录路径fs.symlink(path,callback)
  • callback
  • 第一个参数是error
  • 第二个是linkString,返回的名字字符串
var fs=require('fs');
fs.symlink('./hello.txt','./helloCopy.txt','file',function (err) {
    if(err)console.log('error!!!');
    else {
        fs.readlink('./helloCopy.txt',function (err,linkString) {
            if (err)throw err;
            else console.log(linkString);
        })
    }
})
截断文件(首先清除文件内容,然后修改文件尺寸的操作)fs.truncate(filename,len,callback)

len是截断后文件的大小(字节),callback只有error

var fs=require('fs');
fs.truncate('./hello.txt',15,function (err) {
    if(err)console.log('error!!!');
    else 
    fs.stat('./hello.txt',function (err,stat) {
        console.log('document is '+stat.size);
    })
})

Node.js学习笔记——对文件或目录执行的其他操作_第1张图片
代码运行后变为:
Node.js学习笔记——对文件或目录执行的其他操作_第2张图片

另一种ftruncate(fd,len,callback)
var fs=require('fs');
fs.open('./hello.txt','r+',function(err,fd){
    if(err)console.log('this is error');
    else {
        fs.ftruncate(fd,10,function (err) {
            if(err)console.log('this is error');
        })
    }
})
删除空目录fs.rmdir(path,callback)
var fs=require('fs');
fs.rmdir('./directory',function (err) {
    if(err)throw err;  //如果目录不是空的话会报错
    else console.log('ss');
})

监视文件或目录fs.watchFile(filename,[option],listener)
  • options为一个参数对象。persistent属性值指定了被监视的文件后是否停止当前正在运行的应用程序,默认为true;interval属性值指定每间隔多少毫秒监视一次
  • listener参数是指定回调函数
    function(curr,prev){}
    curr和prev都是一个fs.Stats对象,前者代表被修改之后的当前文件,后者为之前的。
var fs=require('fs');
fs.watchFile('./kingsley.txt',function (curr,prev) {
    if(Date.parse(prev.ctime)==0)//文件被创建
    console.log('built');
    else if (Date.parse(curr.ctime)==0)//文件被删除
    console.log('deleted');
    else if(Date.parse(prev.mtime)!=Date.parse(curr.mtime))//文件被修改
    console.log('modified');
})
取消watchFile:fs.unwatchFile(filename,[option],listener)
var fs=require('fs');
var func1=function(curr,prev){
    if(Date.parse(prev.ctime)==0)
    console.log('created');
    else if (Date.parse(curr.ctime)==0)
    console.log('deleted');
    else if(Date.parse(prev.mtime)!=Date.parse(curr.mtime))
    console.log('modified');
}
var func2=function(curr,prev){
    if(Date.parse(curr.ctime)!=0)
    console.log(curr.size+'bites');
}
fs.watchFile('./hello.txt',func1);//备注1
fs.watchFile('./hello.txt',func2);
fs.unwatchFile('./hello.txt',func1);//这一行使备注1废掉了,即只会输出xx bites
使用watch
  1. var watcher=fs.watch(filename,[options],[listener])
  • options为一个对象,里面有布尔类型的persistent属性值
  • listener
  • function(event,filename){ }
    event参数值为’rename’或’change’
    filename为任何发生改变的文件的完整路径及文件名
var fs=require('fs');
var watcher=fs.watch('./hello.txt',function (event,filename) {
    console.log(event);
    console.log(filename);
    watcher.close();
})
  1. watch方法返回一个fs.FSWatcher对象,该对象拥有一个close的方法,停止监视
  • watcher.close()

当使用watch方法指定监视的文件或目录发生改变时,触发fs.FSWatcher对象的change事件,该事件触发时可以调用的回调函数[listener]为 function(event,filename){ }
错误的时候返回function(error){}

var fs=require('fs');
var watcher=fs.watch('./hello.txt');
watcher.on('change',function (event,filename) {
    console.log(event+' change '+filename);
});

你可能感兴趣的:(Node.js入门)