一、文件系统的读取
- 单文件异步读取
1.请求加载fs模块
let fs=require("fs");
2.暴露一个对象,在需要的模块中引入
redfile(){
//readFile("文件名",option(文件读取方式),回调函数((error,data)=>{}))
fs.readFile("./page/data.txt",(error,data)=>{
if(error){
throw error;
}
//若设置了readFile()中的option参数为“utf-8”,data直接输出为data.txt的内容
console.log(data); //输出一组buffer值 字节数组
console.log(data.toString()); //输出文件data.txt的内容
})
}
3.在需要的模块引入
let fs = require("./comment/fsRead"); //require("文件模块的文件路径")
fs.redfile(); //调用暴露对象中的方法
- 单文件同步读取
1.请求加载fs模块
let fs=require("fs");
2.暴露一个对象,在需要的模块引入
module.exports={
readfileSync(){
//fs.readFileSync("要读取文件的路径") 没有回调函数
let info=fs.readFileSync("./page/data.txt").toString();
console.log(info);
}
}
3.在需要的模块引用
let fs = require("./comment/fsRead"); //require("文件模块的文件路径")
fs.readfileSync(); //调用定义的同步读取的方法
- 使用了文件描述符来读取文件
fs.read(fd, buffer, offset, length, position, callback) 参数说明:
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置
callback-有三个参数(err,bytesRead,buffer) bytesRead 表示读取的字节数,buffer 为缓冲区对象。
1.建立一个缓冲区
let buffer = new Buffer(32); //Buffer(要读取的字节数)
2.打开文件
fs.open("page/write.txt","r+",(error,fd)=>{
if(error){
console.log("文件打开失败");
}else{
3.读取文件
fs.read(fd,buffer,0,buffer.length,0,(error,bytes,buffer)=>{
console.log(bytes,buffer); //32 buffer 一个字三个字节
if(error){
console.log("读取失败");
}else{
console.log(buffer.slice(0,bytes).toString());
}
})
}
})
- 读取文件信息,判断是目录还是文件
fs.stat("文件路径",callbcak);
回调函数,有两个参数:(error, stats), stats 是 fs.Stats 对象
stats.isFile() 判断是否为文件
stats.isDirectory() 判断是否为文件夹
fs.stat("./comment", (error,stats)=>{
if(error){
console.log(error);
}
console.log(stats.isFile());
console.log(stats.isDirectory());
})
- 读取文件夹
fs.readdir("文件路径",callback)
回调函数,有两个参数:(error, files) files为文件夹下的所有子集文件
fs.readdir("./comment",(error,files)=>{
if(error){
console.log(error);
}
console.log(files);
})
实例:用node读取一个文件夹下的所有文件
readAllFile(){
let beginurl="comment";
readFile(beginurl);
function readFile(url){
fs.readdir(url,(error,files)=>{
if(error){
throw error;
}
//遍历所有子集文件
files.forEach((file,index)=>{
//判断子集文件是文件还是目录
fs.stat(url+"/"+file,(error,stats)=>{
if(stats.isDirectory()){
//console.log(file+"是文件夹");
//如果当前是文件夹,再读取文件夹,遍历所有子集文件,知道输出所有单文件
readFile(url+"/"+file);
}else{
console.log(file+"是文件");
}
})
})
})
}
}
二、文件的打开与关闭
fs.open(path, flags[, mode], callback)
path 文件路径; flags 文件打开的行为(r 只读 r+可读可写)
mode 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)
callback 参数(error,fd)
fs.close(fd, callback) fd 为打开文件回调函数传递的参数fd
callback 参数(error)
fs.open("comment/server.js", 'r+', function(err, fd) {
if (err) {
console.log(err);
return;
}
console.log("文件打开成功!");
// 关闭文件
fs.close(fd, function(err){
if (err){
console.log(err);
}
console.log("文件关闭成功");
});
});
三、目录的创建与移除
fs.mkdir(path[, options], callback)
callback 参数 (error)
fs.rmdir(path, callback)
callback 参数 (error)
fs.mkdir("comment/user",(error)=>{
if(error){
console.log("文件已存在");
//移除目录
fs.rmdir("comment/user",(error)=>{
if(error){
console.log("文件移除失败");
}else{
console.log("文件移除成功");
}
})
}else{
console.log("创建成功");
}
})
四、文件的写入
- 覆盖式写入
覆盖式写入 每次写入的内容会覆盖前一次写入的内容
fs.writeFile(file, data, callback)
data为写入的数据
fs.writeFile("page/write.txt",data+"\n",(err)=>{
if(err){
console.log(err);
}else{
console.log("写入成功")
}
})
2.追加式写入
追加式写入 每次写入的内容会追加到之前写入的内容之后
fs.appendFile(file, data, callback) 用法与writeFile()相同
data为写入的数据
五、单文件的删除
fs.unlink(path,callback)
fs.unlink("comment/router/routerinfo.js",(error)=>{
if(error){
console.log(error);
}else{
console.log("删除成功");
}
})