fs内置核心模块 file System 提供文件读写的一些方法,方法多数都存在两种,一种是异步的一种是同步。
- 读取文件,默认读出来的都是buffer。可通过参数指定编码 utf8;
读取文件规则:
1.读取文件,文件必须存在,否则报错;
2.不能通过/读取内容,/表示的是根目录
3.读取的默认类型是buffer
//同步读取,通过返回值接收内容
let content = fs.readFileSync('1.txt');//不指定编码读出来的是buffer
let content = fs.readFile('1.txt','utf8');//指定编码读出来的是字符串,相当于buffer.toString()了
//异步读取,通过callback接收内容;
fs.readFile('1.txt',function(err,data){//错误优先
if(err)return err;
console.log(data); //没有指定编码,读出的是buffer
})
fs.readFile('1.txt','utf8',(err,data)=>{
if(err) return err;
console.log(data)//指定了编码,读出的是字符串
})
写文件规则:
1.读取的默认值是buffer,写入时默认都会把内容toString然后写入,都是utf8编码写入。
2.读取的文件必须存在,否则报错。写入的时候,文件不存在会自动创建。
3.写入的时候,里面有内容会被覆盖掉。
fs.writeFileSync('1.txt','你好');
fs.writeFileSync('1.txt',Buffer.from("你好"))
fs.writefileSync('1.txt',{a:1,b:2})
fs.writeFile('1.txt','你好',err=>{
if(err){
console.log(err)
}
})
function copy(source,targer){
let content = fs.readFileSync(source)
fs.writeFileSync(target,target)
}
fucntion copy(source,target,callback){
fs.readFile(source,function(err,data){
if(err)return callback(err);
//会覆盖
fs.appendFile(target,data,callback)//不会覆盖,会文件中追加内容
})
}
- 文件状态 fs.stat
```javascript
//fs.stat('\',(err,stats)=>{})
//fs.stat 可以获取文件或者文件夹状态
//1.可以查看文件或者目录的一些属性 stats.***
// atime: 2018-11-29T11:51:51.580Z, 访问时间 access time
// mtime: 2018-10-22T06:55:28.377Z, 修改时间modify time(文件最近修改时间)
// ctime: 2018-10-22T06:55:28.377Z, 变化时间 change time(文件状态最近更改时间)变化 > 修改
// birthtime: 2017-10-25T19:16:04.549Z } 创建时间 birth time
//2.可以查看验证文件或者文件夹是否存在,if(err)console.log('不存在')
//3.可以调用 stats.isFile();stats.isDirectory();方法验证是不是文件或者文件夹
fs.stat('/',(err,stats)=>{
if(err)return console.log('文件不存在')
if(stats.isFile()){
console.log('这是文件')
}
if(stats.isDirectory()){
console.log('这是文件夹')
}
})
fs.mkdir('/a',err=>{
if(err)return console.log('创建失败')
})
fs.mdir('/a/b',err=>{
if(err) return console.log('创建失败')
})
function makep(url,cb){
let ary = url.split('/');
let i = 0;
function make(path){
if(i>=ary.length){
return cb(null)
}
fs.stat(path,function(err,stats)=>{
if(err){
fs.mkdir(path,function(err){
if(err) return cb(err);
i++;
let p = ary.slice(0,i+1).join('/')
make(p)
})
}else{
i++;
let p = ary.slice(0,i+1).join('/')
make(p)
}
})
}
make('/'+ary[i])
}
makep('/a/b/c/d',err=>{
if(err)console.log('失败')
console.log('创建成功')
}