简介
-
大部分方法都是异步方法。方法后面带
Sync
的为同步方法。比如:writeFileSync
、appendFileSync
-
引入
fs
// fs 是 node.js 的核心模块。不用下载安装,可以直接引入
var fs = require('fs');
fs.stat 检测是文件还是目录
目录、文件是否存在
stats
类中的方法
stats.isFile()
:是否是文件stats.isDirectory()
:是否是目录stats.isBlockDevice()
:是否是块设备stats.isCharacterDevice()
:是否是字符设备stats.isSymbolicLink()
:是否是软连接stats.isFIFO()
:是否是FIFO
。FIFO
是UNIX
中的一种特殊类型的命令管道stats.isSocket()
:是否是Socket
// 检测是文件还是目录
// fs.statSync()同步获取stats对象,通过返回值接收
fs.stat('html', function(error, stats) {
if (error) {
console.log(error)
return false
}
console.log('文件:' + stats.isFile())
console.log('目录:' + stats.isDirectory())
})
fs.mkdir 创建目录
创建之前先判断是否存在
fs.mkdir('css', function(error) {
if (error) {
console.log(error)
return false
}
console.log('创建目录成功')
})
fs.readdir 读取目录
读取目录下第一级内容 把目录下面的文件和文件夹都获取到
fs.readdir('html', function(error, data) {
if (error) {
console.log(error)
return false
}
// data是数组类型,包含文件夹以及文件的名字(只有第一级目录内容)
// 拿到一个文件夹下面的所有目录
console.log(data)
})
fs.rmdir 删除目录
该方法只能删除目录,不能删除文件
fs.rmdir('abc目录', function(error) {
if (error) {
console.log(error)
return false
}
console.log('删除目录成功')
})
fs.open 打开文件
fs.open(path, flags[, mode], callback)
flags
参数
r
:以读取模式打开文件。如果文件不存在抛出异常。r+
:以读写模式打开文件。如果文件不存在抛出异常。rs
:以同步的方式读取文件。rs+
:以同步的方式读取和写入文件。w
:以写入模式打开文件,如果文件不存在则创建。wx
:类似w
,但是如果文件路径存在,则文件写入失败。w+
:以读写模式打开文件,如果文件不存在则创建。wx+
:类似w+
, 但是如果文件路径存在,则文件读写失败。a
:以追加模式打开文件,如果文件不存在则创建。ax
:类似a
, 但是如果文件路径存在,则文件追加失败。a+
:以读取追加模式打开文件,如果文件不存在则创建。ax+
:类似a+
, 但是如果文件路径存在,则文件读取追加失败。
fs.open('input.txt', 'r+', function(error, fd) {
if (error) {
console.log(error)
return false
}
console.log('文件打开成功!')
})
fs.read 读取文件
fs.read(fd, buffer, offset, length, position, callback)
参数说明
fd
:通过fs.open()
方法返回的文件描述符buffer
:数据写入的缓冲区offset
:缓冲区写入的写入偏移量length
:要从文件中读取的字节数position
:文件读取的起始位置,如果position
的值为null
,则会从当前文件指针的位置读取callback
:回调函数,有三个参数err
,bytesRead
,buffer
。err
为错误信息,bytesRead
表示读取的字节数,buffer
为缓冲区对象
var buf = new Buffer.alloc(1024)
fs.open('input.txt', 'r+', function(error, fd) {
if (error) {
console.log(error)
return false
}
console.log('文件打开成功!')
console.log('准备读取文件:')
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
if (err) {
console.log(err)
return false
}
console.log(bytes + ' 字节被读取')
// 仅输出读取的字节
if (bytes > 0) {
console.log(buf.silce(0, bytes).toString())
}
})
})
fs.close 关闭文件
fs.close(fd, callback)
var buf = new Buffer.alloc(1024)
fs.open('input.txt', 'r+', function(error, fd) {
if (error) {
console.log(error)
return false
}
console.log('文件打开成功!')
console.log('准备读取文件:')
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
if (err) {
console.log(err)
return false
}
console.log(bytes + ' 字节被读取')
// 仅输出读取的字节
if (bytes > 0) {
console.log(buf.silce(0, bytes).toString())
}
// 关闭文件
fs.close(fd, function(err) {
if (err) {
console.log(err)
return false
}
console.log('文件关闭成功')
})
})
})
fs.writeFile 写入文件
writeFile
直接打开文件默认是w
模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。- 文件不存在就创建,但不能创建目录
// 写入文件
// 会覆盖之前的内容
// 文件不存在就创建
// utf8参数可以省略
fs.writeFile('123.txt', '你好 node.js', 'utf8', function(error) {
if (error) {
console.log(error)
return false
}
console.log('写入成功')
})
fs.appendFile 写入追加文件
fs.appendFile('123.txt', '这是写入的内容\n', function(error) {
if (error) {
console.log(error)
return false
}
console.log('追加写入成功')
})
fs.readFile 读取文件
fs.readFile('123.txt', function(error, data) {
if (error) {
console.log(error)
return false
}
// data是读取的十六进制数据
// 也可以在参数中加入格式编码 utf8 来解决十六进制的问题
// console.log(data)
// 读取出所有行的信息
console.log(data.toString())
})
fs.unlink 删除文件
fs.unlink('index.txt', function(error) {
if (error) {
console.log(error)
return false
}
console.log('删除文件成功')
})
fs.rename 重命名
重命名 或者 剪切文件(移动)
fs.rename('html/index.html', 'html/news.html', function(error) {
if (error) {
console.log(error)
return false
}
console.log('修改名字成功')
})
fs.access 判断目录、文件是否存在读写权限
fs.access('package.json', function(error) {
console.log(error ? '目录/文件不存在' : '文件存在,可以进行读写')
})
fs.createWriteStream 写入文件流
var data = '我是从数据库中获取的数据,我要保存起来'
var writeStream = fs.createWriteStream('output.txt')
writeStream.write(data, 'UTF8')
// 标记文件末尾,结束写入流,释放资源
writeStream.end()
writeStream.on('finish', function() {
console.log('写入完成')
})
writeStream.on('error', function() {
console.log(error.stack)
})
console.log('程序执行完毕')
pipe 管道流
var readStream = fs.createReadStream('input.txt')
var writeStream = fs.createWriteStream('output.txt')
readStream.pipe(writeStream)
console.log('程序执行完毕')
发表评论