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 );