02fs

文件读取大部分都是拥有异步和同步的两个接口

普通的文件读取

// 同步读取
const fs = require('fs')
try {
    const data = fs.readFileSync('./hello.txt', 'utf8')
}catch(err) {
    throw err
}

// 异步读取
fs.readFile('./hello.txt','utf8', function(err, data) {
    if(err) throw err
    console.log('读取成功:' +  data)
})

以流的方式读取

const fs = require('fs')
const readStream = fs.createReadStream('./hello.txt', 'utf8')
readStream.on('data', function(chunk){
    console.log('读取数据:'+ chunk)
}).on('error', function(err) {
    console.log(err.message)
}).on('end', function() {
    console.log('没有数据了')
}).on('close', function() {
    console.log('已经关闭')
})

简单写入

const fs = require('fs')
// 同步写入
try {
    fs.writeFileSync('./hello.txt', 'hello node', utf8)
}catch(err) {
    throw err
}
// 异步写入
fs.writeFile('./hello.txt','hello node', 'utf8', (err,data) => {
    if(err) throw err
    console.log(data)
})

以流的方式写入

const fs = require('fs')
const writeStream = fs.createWriteStream('./hello.txt', 'hello node', 'utf8')
// 在end() 后触发
writeStream.on('close', function(){
    console.log('关闭')
})
writeStream.write('hello')
writeStream.write('node')
writeStream.end()

查看某个文件是否存在(也可以用来检测时候有某个文件的权限)

const fs = require('fs')
fs.access('./hello.txt', function(err){
    if(err) throw err
    console.log('该文件存在,可以访问这个文件')
})

创建删除目录

const fs = require('fs')
// 如果目录存在报错
// 异步
fs.mkdir('./abc', function(err) {
    if(err) throw err
    console.log('创建成功')
})
// 同步
fs.mkdirSync('./abc')

//删除目录
fs.rmdir('./abc',function(err) {
    if(err) throw err
    console.log('删除成功')
})
// 同步
fs.rmdirSync('./abc')

创建临时目录

const fs = require('fs')
fs.mkdtemp('./', function(err, folder) {
    if(err) throw err
    console.log('创建的临时文件夹' + folder)
} )

删除某个文件

const fs = require('fs')
// 异步
fs.unlink('./hello.txt', function(err){
    if(err) throw err
    console.log('文件删除成功')
})
// 同步
fs.unlinkSync('./hello.txt')

文件属性

const fs = require('fs')

//异步
fs.stat('./hello.txt', function(err, stats){
    if(err) throw
    console.log('文件大小', stats.size)
    console.log('创建时间', stats.birthtime)
    console.log('访问时间', stats.atime)
    console.log('修改时间', stats.mtime)
})
// 同步
const stats = fs.statSync('./hello.txt')
/*
stats 对象中创建的属性
dev: 2114,
ino: 48064969,
mode: 33188,
nlink: 1,
uid: 85,
gid: 100,
rdev: 0,
size: 527,
blksize: 4096,
blocks: 8,
atime: Mon, 10 Oct 2011 23:24:11 GMT, // 访问时间
mtime: Mon, 10 Oct 2011 23:24:11 GMT,  // 文件内容修改时间
ctime: Mon, 10 Oct 2011 23:24:11 GMT,  // 文件状态修改时间
birthtime: Mon, 10 Oct 2011 23:24:11 GMT  // 创建时间

stats对象常见的方法
stats.isFile() 是否是文件
stats.isDirectory() 是否是目录
stats.isSocket() 是否是socket 文件
*/

监听文件变化

const fs = require('fs')
//fs.watch() 和 fs.watchFile()
//fs.watchFile() 是通过轮询的方式, 
const option = {
    persistent: true,
    interval: 2000
}
fs.watchFile('./hello.txt', option, function(curr, prv){
    console.log('修改时间'+ curr.mtime)
})

// if you want to be notified when the file was modified, not just accessed, you need to compare curr.mtime and prev.mtime

遍历目录

const fs = require('fs')
const path = require('path')
//fs.readdirSync() 只能读取一层目录
function getAllFile(dir) {
    let arr = []
    const files = fs.readdirSync(dir,'utf8')
    files.forEach(file => {
        const filePath = path.resolve(dir, file)
        const stats = fs.statSync(file)
        if(stats.isFile()){
            arr.push(file)
        }else if(stats.isDirectory()){
            arr = arr.concat(getAllFile(file))
        }
    })
    return arr
}
const files = getAllFile('./abc')
console.log(files)

重命名

const fs = require('fs')
// 异步
fs.rename('./abc','./abcd', function(err) {
    if(err) throw err
    console.log('重命名成功')
})
// 同步
fs.renameSync('./abcd', './abc')

还有一些其他的

//追加文件内容
// fs.appendFile()
// 打开文件
// fs.open()
// 读取文件
// fs.read()
// 文件内容截取
// fs.truncate()
// 修改文件属性
// fs.utimes()
// 等等....

学模块步骤

  1. 看github上的这个项目
  2. 自己写一遍,传到自己的github项目
  3. 看node文档
  4. 复习一篇博客
posted @ 2020-02-19 11:06  达文西9527  阅读(190)  评论(0编辑  收藏  举报