fs 文件模块


//文件+文件夹的操作,内置核心模块
//引入文件
//fs中的方法: 同步和异步同时出现 能用异步绝不用同步

const fs = require("fs");

/*

readFileSync      readFile 读文件

writeFileSync      writeFile 写文件

mkdirSync         mkdir 创建目录 (同步情况下)

rmdirSync          rmdir 删除目录

unlinkSync         unlink 删除文件

existsSync        exists 判断一个目录是否存在

appendFileSync   appendFile 追加内容         // fs.writeFileSync("./3w.txt","追加的内容",{ flag:'a' });

readdirSync       readdir 读取目录下的所有文件

 

statSync           stat 查看文件信息

读取文件后显示的相关信息(粘贴了部分):

atime: 2017-03-03T08:43:22.838Z, 访问时间
mtime: 2017-03-03T08:43:22.838Z, 修改时间 区别:只要改变就会变,但内容有可能不变
ctime: 2017-03-03T08:43:22.838Z, 改变时间 区别:只有内容改了才会碧娜
birthtime: 2017-03-03T06:36:48.328Z. 创建时间

 

路径:path

console.log(__dirname+"/test");   获取绝对路径

console.log( path.resolve() );     取得当前运行文件的绝对路径

console.log( path.join( "abc", "aa" ) );    合并路径

console.log( path.join(__dirname,"abc","bv" ) );       合并成绝对路径

console.log ( path.extname( 'file.js') );       获取文件的扩展名

console.log( path.sep );        当前系统使用的分隔符

 

path.basename    获取文件名
path.extname     获取扩展名
path.sep     操作系统提定的文件分隔符
path.delimiter  属性值为系统指定的环境变量路径分隔符
path.normalize  将非标准的路径字符串转化为标准路径字符串 
path.resolve    取得绝对路径 

*/

/*---------------------- 读文件 ----------------------*/
//读取文件 同步:readFileSync
//只能读取存在的文件
//读出来的内容是buffer类型, 然后用toSting转换
//将内容读取到内存中,fs.readFile 不能读取比内存大的文件

var content = fs.readFileSync('./1r.txt');
console.log( content.toString() );

// 在读文件的时候直接带上编码
var content2 = fs.readFileSync('./1r.txt',{ encoding:'utf8' });
console.log( content2 );

//读取文件 异步:readFile 异步需要传回调函数进去
//同步可以使用 try catch , 异步error-first( 将回调函数的第一个参数为错误参数 , 结果放到回调函数中 )
console.log(1);
fs.readFile("./1r.txt",{ encoding:'utf8' },function (err,data) {
console.log( data )
});
console.log(3);


//按照顺序读取文件
fs.stat('./test/a/',function (err,stat) {
// console.log(stat)
]);
/*
atime: 2017-03-03T08:43:22.838Z, 访问时间
mtime: 2017-03-03T08:43:22.838Z, 修改时间 区别:只要改变就会变,但内容有可能不变
ctime: 2017-03-03T08:43:22.838Z, 改变时间 区别:只有内容改了才会碧娜
birthtime: 2017-03-03T06:36:48.328Z. 创建时间
*/



--------------------- eg: --------------------
//读取2个文件放到 school 里
console.log( "测试:" );
var school = { };
fs.readFile('./1r.txt','utf8',function (err,data) {
console.log( data);
school.name = data;
out();
});
fs.readFile('./2w.txt','utf8',function (err,data) {
console.log( data);
school.age = data;
out();
});
function out() {
if( Object.keys(school).length == 2 ){
console.log( school )
}
}

console.log( school );
console.log( "测试end:" );



/*---------------------- 写文件 ------------------------*/

fs.writeFileSync('./2w.txt',"同步写入的内容",{ encoding:"utf-8"});

fs.writeFile('./3w.txt',"异步异步",{ encoding:"utf-8"},function (err,data) {
// 回调函数特点:第一个数永远是error对象
console.log(err)
});

/*---------------------- 创建目录 -----------------------*/
//创建目录
fs.mkdirSync('test');
//删除目录
// fs.rmdirSync("test")

// 多重目录一起创建
makep( 'parent/child/child2/child3' );
function makep( path ) {
var num = path.split('/');
//console.log(num);
num.forEach(function (item , index) {
var arr = num.slice(0,index+1).join('/');
console.log(arr);
//判断文件是否存在
var flag = fs.existsSync(arr);
if(!flag){
fs.mkdirSync( arr );
}

});
}

//如果是异步的话,最后一个参数一定是回调函数
fs.mkdir('./test/a',function (err) {
console.log(err)
});


//读取目录
fs.readdir('./test/a',function (err,files) {
console.log(files); //读取指定目录下的所有文件 子目录 子文件的名字
//迭代输出
files.forEach(function (file) {
fs.readFile('./test/a/'+file,function (err,data) {
console.log( data.toString() )
})
});
});

//判断一个文件是否存在
fs.exists('./test',function (exists) {
console.log( exists )
});



/*----------------------------------- path ---------------------------------*/
/* 路径处理 */
var path = require("path");

// 合并路径
// join 自动帮加分隔符,在哪个系统下,加哪一类的分隔符
console.log(__dirname+"/test");

// 不需要考虑格式是 \ 还是 /
console.log( path.join( "parent", "child" , "a" , "b") );
console.log( path.join(__dirname, "a", "b" , "c") );

// 取得绝对路径
// 取得当前文件运行的绝对路径
console.log( path.resolve() )

// 扩展名
console.log ( path.extname( 'file.js') );

//当前系统使用的分隔符
console.log( path.sep );



posted @ 2017-03-03 17:58  陌悠尘  阅读(374)  评论(0编辑  收藏  举报