一:文件写入:
(1):文件操作需要加载fs核心模块。
/* 文件写入:分为同步和异步写入。 1:同步写入函数:fs.writeFileSync(file,data,options) ; 2:异步写入函数:fs.writeFile(file,data,options,callback) ; 3:参数解释:options和callback。 options参数值为一个对象,包含三个属性{encoding,mode,flag},默认为utf-8,mode:0x666,flag:'w' callback:为回调函数。 flag为进行写入时模式选择。有w,r+(打开文件进行读取和写入,如果文件不存在则发生异常.) */ /*同步写入*/ var f = require('fs'); //加载fs核心模块. function test() { console.log('开始写入.........'); try { //这里mode没有写表示采用默认值。 var my_option = {encoding:'utf-8' ,flag:'a'};//a:表示追加,如不存在则创建, /*w:如存在则截断,在写入,截断是指从 文件内容中某个位置开始写,如果从零开始写则原来文件中的内容将都被删除*/ var data = 'I think that we must respect of myself'; f.writeFileSync('D:/Program Files/nodejs/chapter/a.txt',data,my_option); console.log('写入成功'); } catch(e) { console.log('写入失败'+e); } } test();
输出:
D:Program Files
odejschapter>node 文件操作.js
开始写入.........
写入成功
D:Program Files odejschapter>
(2):异步文件写入:
/*异步文件写入*/ var f = require('fs'); var data = 'You often to do the error thing'; console.log(1); console.log('开始写入.........'); f.writeFile('a.txt',data,function(error){ if(error) { console.log('i am sorry'+error); } else { console.log('写入成功'); } console.log(2); }); console.log(3); //打印这些数字是为了测试异步函数执行的顺序.
输出:
D:Program Files
odejschapter>node 异步文件写入.js
1
开始写入.........
3
写入成功
2
D:Program Files odejschapter>
(3):向文件内追加内容
1:在options为默认选择时,在对指定的文件名进行操作时,如果文件存在则会将其从零进行截断,也可以认为是覆盖。
所以使用追加的方式就能解决该问题:
2:异步追加函数:appendFile(file,data,options,callback);
3:代码省了;
二:文件读取:由于同步文件操作使用的不多,便..................................。
(1):代码:
/* 1:f.readFile(file,options,callback); 2:callback:读取的callback和写入的callback不同, 读取到的数据将由回调函数的第二个参数接受. */ /*这里回调函数定义放在外面*/ var f = require('fs'); f.readFile('D:/Program Files/nodejs/chapter/a.txt',function(err,data) { if(err) { console.log('文件读取失败'+err); } else { console.log('data'); } console.log(data.toString()); });
输出:
D:Program Files
odejschapter>node 异步文件读取.js
data
You often to do the error thing
D:Program Files odejschapter>
其他写法的输出,怎么解释
/* 1:f.readFile(file,options,callback); 2:callback:读取的callback和写入的callback不同, 读取到的数据将由回调函数的第二个参数接受. */ /*这里回调函数定义放在外面*/ var f = require('fs'); f.readFile('D:/Program Files/nodejs/chapter/a.txt',function(err,data) { if(err) { return console.log('文件读取失败'+err); } else { return console.log('读取成功'); }
console.log(1); //这个部分没有执行. console.log(data.toString()); });
输出: //这是因为异步的原因,可以参考异步文件写入.
D:Program Files
odejschapter>node 异步文件读取.js
读取成功
/* 1:f.readFile(file,options,callback); 2:callback:读取的callback和写入的callback不同, 读取到的数据将由回调函数的第二个参数接受. */ /*这里回调函数定义放在外面*/ var f = require('fs'); console.log(1); f.readFile('D:/Program Files/nodejs/chapter/a.txt',function(err,data) { if(err) { console.log('文件读取失败'+err); } else { console.log(2); console.log('写入成功'); } console.log(3); console.log(data.toString()); });
输出:
D:Program Files
odejschapter>node 异步文件读取.js
1
2
写入成功
3
You often to do the error thing
D:Program Files odejschapter>
三:获取文件的信息:
/* 1:获取文件信息的异步函数:fa.stat(path,callback); callback为回调函数,带有两个参数,如(err,stats),stats是fa.stats对象。 2:在js中函数是可以由变量来接受的和对象的属性。对象也可以由一个变量或者 其他对象的属性来接受。 */ var fa = require('fs'); // fa.stat('/Program Files/nodejs/chapter/a.txt',function(err,sta){ console.log(sta.isFile()); //判断其是否是文件. console.log(typeof sta); console.log(sta); }); //sta是fa.stats对象,fs.stat(path)执行后,会将Stats类的实例返回给其回调函数。 //Stats类提供了判断文件的相关属性。
输出:
D:Program Files
odejschapter>node 获取文件信息.js
true
object
Stats {
dev: 3532891753,
mode: 33206,
nlink: 1,
uid: 0, //
gid: 0,
rdev: 0,
blksize: 4096,
ino: 562949953523803,
size: 31,
blocks: 0,
atimeMs: 1583763104750.8972,
mtimeMs: 1583763104750.8972,
ctimeMs: 1583763104750.8972,
birthtimeMs: 1583759686356.3164,
atime: 2020-03-09T14:11:44.751Z,
mtime: 2020-03-09T14:11:44.751Z,
ctime: 2020-03-09T14:11:44.751Z,
birthtime: 2020-03-09T13:14:46.356Z
}
4:对文件和目录进行操作
(1):路径操作
var ph = require('path'); //console.log(ph); var str = 'C:/Windows/OCR/zh-cn/MsOcrRes.orp'; console.log(ph.basename(str)); //获取文件名 console.log(ph.dirname(str)); //获取根目录 console.log(ph.extname(str)); //获取文件名的后缀 var s = ph.extname(str); var d = ph.basename(str); var f = ph.dirname(str); console.log(typeof s); lujin = ph.join(f+d+s); console.log('lujin:'+lujin); //拼接路径lujin:C:WindowsOCRzh-cnMsOcrRes.orp.orp var lujin1 = ('C:/Windows'+'/OCR'+'/zh-cn'+'/MsOcrRes.orp'); console.log('lujin1:'+lujin1);//lujin1:C:/Windows/OCR/zh-cn/MsOcrRes.orp var lujin2 = ph.join('C:/Windows','/OCR','/zh-cn','/MsOcrRes.orp') console.log('lujin2:'+lujin2);//lujin2:C:WindowsOCRzh-cnMsOcrRes.orp
输出:
D:Program Files
odejschapter>node path.js
MsOcrRes.orp
C:/Windows/OCR/zh-cn
.orp
string
lujin:C:WindowsOCRzh-cnMsOcrRes.orp.orp
lujin1:C:/Windows/OCR/zh-cn/MsOcrRes.orp
lujin2:C:WindowsOCRzh-cnMsOcrRes.orp
(2):目录操作
/* 1:对文件,目录,进行增加,读取,和删除等操作. 2:创建目录的异步函数:fs.mkdir(path,[,mode],callback) mode:表示目录权限,默认为0777, */ var fs = require('fs'); console.log('在D:/Program Files/nodejs/chapter目录下创建一个test目录'); fs.mkdir('D:/Program Files/nodejs/chapter/test3',function(err){ if(err) { return console.error(err); } console.log('目录创建成功'); }); /* 3:用于读取目录的异步函数: fs.readdir(path,callback); 返回的是一个包含目录下的所有文件. */ var Z = fs.readdir('D:/Program Files/nodejs/chapter/test2',function(err,files){ if(err) { return console.log(err); } //遍历所有文件 console.log('Z类型'+typeof Z); console.log('files类型'+typeof files) files.forEach(function(file){ console.log(file); //注意readdir函数没有返回, console.log('Z类型'+typeof Z); }) }); //这里犯了一个错误,readdir为异步函数.所以打印的是undfined console.log('Z类型'+typeof Z);
输出:
在D:/Program Files/nodejs/chapter目录下创建一个test目录
Z类型undefined
目录创建成功
Z类型undefined
files类型object
test1.txt
Z类型undefined
test2.txt
Z类型undefined
(3):删除文件,然后才能删除目录
/* 4:删除目录的异步函数.fs.rmdir(path,callback); 删除目录有一个要求就是该目录必须为空, 5:删除文件的异步函数:fs.unlink(path,callback); 所以只有读取目录下所有的文件,并且将其删除干净,才能删除目录 */ var fs = require('fs'); console.log('读取D:/Program Files/nodejs/chapter/test2目录'); fs.readdir('D:/Program Files/nodejs/chapter/test2',function(err,files){ if(err) { return console.error(err); } //遍历文件D:/Program Files/nodejs/chapter/test2 files.forEach(function(file){ console.log(file); //输出文件名 //删除文件 fs.unlink('D:/Program Files/nodejs/chapter/test2/'+file,function(err){ if(err) { return console.error(err); } console.log(file+'文件删除成功'); }); }); console.log('准备删除test2目录'); fs.rmdir('D:/Program Files/nodejs/chapter/test2',function(err){ if(err) { return console.error(err); } console.log("目录删除成功"); }); }); //注意rmdir一定要写到readdir这个异步函数中.
输出:
D:Program Files
odejschapter>node 删除文件.js
读取D:/Program Files/nodejs/chapter/test2目录
test1.txt
test2.txt
准备删除test2目录
test1.txt文件删除成功
test2.txt文件删除成功
目录删除成功
5:文件和目录的权限:
(1):在Linux分类中有关于文件和目录权限的原理.