注意:以下所有示例均是异步语法! 注意:以下所有示例均是异步语法!
创建文件node.js 允许我们在计算机本地创建文件,例如创建一个 word 文件:
// 引入核心模块(fs)
var fs = require('fs')
// API
fs.writeFile('./hello.doc', 'hello', (error) => {
// 创建失败
if(error){
console.log(`创建失败:${error}`)
}
// 创建成功
console.log(`创建成功!`)
})
// 注意:同名/同类型文件多次创建并不会新增,而是覆盖机制
首先引入 node.js 为我们写好的核心模块 fs ,接着使用 writeFile API 进行参数配置,第一个参数(‘./hello.doc’) 为文件位置/类型/命名,第二个参数(‘hello’) 为文件默认内容。
需要注意的是,如果创建文件成功,error 的值是 null,你可以使用 console.log 来查看 error 在何是发生改变。
有必要说一下语法及参数,剩下的按照参数配置进行业务编写即可。
语法
fs.open(path, flags[, mode], callback)
参数:
- path:文件的路径
- flags:文件打开的行为,具体值详表格
- mode:设置文件模式(权限),文件创建默认权限为 0666(可读,可写)
- callback:回调函数,带有两个参数如:callback(err, fd)
打开刚刚创建的 hello.doc 文件:
// 引入核心模块(fs)
var fs = require('fs')
// API
fs.open('./input.txt', 'r', (err,fd) => {
// 打开失败
if(err){
console.log(`文件打开失败:${err}`)
}
// 打开成功
console.log(`文件打开成功!${fd}`)
})
写入内容
我们可以通过 缓冲区(Buffer) / writeFile方法 来为文件写入二进制内容。
语法
fs.writeFile(file, data[, options], callback)
writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。
参数
- file:文件名或文件描述符。
- data:要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
- options:该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
- callback:回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
// 引入读写核心模块
var fs = require('fs')
// 向文件中写入内容(利用缓冲区解决二进制数据问题)
var data = '\n I am input content \n'
var data = new Buffer(data)//放入缓冲区
// API
fs.writeFile('input.txt', data, {flag: 'a'}, (err) => {
// 写入失败
if(err){
console.log(`文件写入失败(${err})`)
}
// 写入成功
console.log(`写入成功!`)
})
将数据追加到文件,需要注意的是,如果文件尚不存在则会创建该文件。
语法
fs.appendFile(filename,data,[options],callback);
// 引入读写核心模块
var fs = require('fs')
// node.js 规定 data 可以是 string / buffer
var data = '\n 我是追加的内容! \n'
var data = new Buffer(data)//这里使用缓冲区(buffer)
// API
fs.appendFile('input.txt', data, (err) => {
// 追加失败
if(err) throw err
// 追加成功
console.log('追加内容成功!')
})
读取文件中的内容。
语法
fs.read(fd, buffer, offset, length, position, callback)
参数
- fd:通过 fs.open() 方法返回的文件描述符。
- buffer:数据写入的缓冲区。
- offset:缓冲区写入的写入偏移量。
- length:要从文件中读取的字节数。
- position:文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
- callback:回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。
input.txt 文件内容
我是内容
// 引入读写核心模块
var fs = require('fs')
// 读取 input.txt 文件(异步非阻塞式)
fs.readFile('input.txt', (err,data) => {
// 读取失败
if(err) throw err
// 读取成功
console.log('- - - - - - - - - - - - - - - - - - - - -')
console.log(`input.txt:${data}`)
console.log('- - - - - - - - - - - - - - - - - - - - -')
})
创建一个目录,需要注意的是,在 Windows 上,在根目录上使用 fs.mkdir() (即使使用递归参数)也会导致错误。
语法
fs.mkdir(path[, options], callback)
参数
- path:文件路径。
- options:recursive - 是否以递归的方式创建目录,默认为 false。mode - 设置目录权限,默认为 0777。
- callbac:回调函数,没有参数。
// 引入读写核心模块
var fs = require('fs')
// 注意:目录的根必须存在
console.log('即将开始创建...')
fs.mkdir("/data/new", (err) => {
// 创建失败
if(err) throw err
// 创建成功
console.log('文件创建成功!')
})
注意:如果创建的目录已经存在,则会提示如下Error:
Error: EEXIST: file already exists, mkdir 'C:\data\new'
删除目录
删除一个已经存在的目录,需要注意的是,在递归模式中,如果 path 不存在则不报告错误,并且在失败时重试操作。
语法
fs.rmdir(path, callback)
参数
- path:文件路径。
- callback:回调函数。
// 引入读写核心模块
var fs = require('fs')
// 删除前一个创建的目录(/data/new)
console.log('准备执行删除目录操作')
fs.rmdir("/data/new", (err) => {
// 删除失败
if(err) throw err
// 删除成功
console.log('删除目录成功!')
})