Node.js学习笔记——对文件或目录执行的其他操作
- 创建目录
- 查看与修改文件或目录的信息
- 检查文件或目录是否存在
- 获取文件或目录的绝对路径
- 修改文件访问时间及修改时间
- 修改文件或目录的读写权限
- 其它操作
- 移动文件: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)
- 删除空目录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);
})
})
代码运行后变为:
另一种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
- 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();
})
- 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);
});