Node(三)

Node的文件系统

FS(FileSystem):实现对文件的IO操作。

fs是Node的模块,需要导入。

var fs = require("fs");

1.同步和异步

同步:程序在涉及到文件IO时,必须等到文件IO操作结束后再执行后续的操作。

异步:程序再涉及到文件IO时,不等待文件IO操作结束,继续执行后续的操作,当文件IO操作结束后,系统会通知程序处理文件IO的结果。

2.回调是什么

所谓“回调”,即“回头调用”;“回调函数”是指函数定义后并不立即调用,而是等到某个事件被触发时再调用。

具有异步的特性。

3.fs模块的常用函数

(1)读文件

异步读文件:

readFile(filename,function(err,buffer){    //异步读取文件(非阻塞方式)
	处理文件的代码	
}):

“filename”:文件名(包含路径)

“function(err,buffer)”:回调函数,“err“存放的是读文件失败的信息;”buffer“存放的是文件的内容。

同步读文件:

readFileSync(filename,"utf8")    //同步读文件,函数的返回值是一个字符串(文件内容)

第二个参数:用来指定字符集,如不指定则函数返回Buffer(一个缓冲区);若指定则返回字符串。

//1.导入fs模块

const fs = require("fs");

//2.异步读取
fs.readFile("input.txt",function(err,buf){
    if(err){
        return console.error(err);
    }
    console.log("异步读取文件",buf.toString())
})

console.log("2022")

//3.同步读取
let str = fs.readdirSync("./input.txt","utf-8")
console.log("同步读取文件",str);

console.log("2022")

(2)打开文件

open(path,flags[,mode],callback)

"path":文件名(包含路径)

"flags":打开文件的方式
	--"r":以只读的方式打开文件,若文件不存在则报异常
	--"w":为写打开文件,若文件不存在则创建文件
	--"a":向文件中追加内容,若文件不存在则创建文件
	--"rs":同步方式打开文件

"mode":设置文件模式,但前提是已创建该文件。它默认为0666,读取和写入。

"callback":这是回调函数,有两个参数(err, fd)。
const fs = require("fs");

//2.异步读取
// fs.readFile("input.txt",function(err,buf){
//     if(err){
//         return console.error(err);
//     }
//     console.log("异步读取文件",buf.toString())
// })
//
// console.log("2022")
//
// //3.同步读取
// let str = fs.readdirSync("input.txt","utf8")
// console.log("同步读取文件",str);
//
// console.log("2022")


fs.open("input.txt","r+",function(err,fd){
    if(err){
        return console.error(err)
    }
    console.log("fd:",fd)
    console.log("打开文件成功")
})

(3)获取文件信息

获取文件信息:是一个对象,包含文件或目录(文件夹)的具体信息。通过该对象可以判断当前处理的是文件还是目录。

stat(path,function(err,states){
	"err":存放的是打开文件异常时的错误信息
	"states":文件的状态信息
})

(4)写入文件

fs.writeFile(filename, data[, options], callback)    //异步写入

"filename":文件名
"data":向文件写入的内容,可以是字符串或者Buffer
"options":编码格式,可选参数
"callback":回调函数
const fs = require("fs");

//1.向input.txt中写入内容
fs.writeFile("input.txt","大唐不夜城",function(err){
    if(err){
        return console.error(err)
    }
    console.log("写入文件成功");
})
fs.writeFileSync(fileName, str, 'utf8');    //同步写入

(5)读取文件(以二进制的方式读取)

fs.read(fd, buffer, offset, length, position, callback)

"fd":是文件的描述符,由open函数返回
"buffer":被写入数据的缓冲区--存放从二进制文件中读取的内容
"offset":偏移量,指的是写入缓冲区的位置
"length":指要读取的字节数
"position":指的是从文件的什么位置开始读,默认从当前位置开始
"callback":回调函数
//读取二进制文件
const fs = require("fs");

let buf = new Buffer(1024);

fs.open("input.txt","r+",function(err,fd){
    if(err){
        return console.error(err)
    }
    console.log("打开文件成功!")
    fs.read(fd,buf,0,buf.length,0,function(err,bytes){
        if(err){
            return console.error(err);
        }
        if(bytes > 0){
            let str = buf.slice(0,bytes).toString();
            console.log("读取的内容是:",str);
        }
    })
    console.log("----End----");
})

(6)关闭文件

close(fd,callback)
let buf = new Buffer(1024);

fs.open("input.txt","r+",function(err,fd){
    if(err){
        return console.error(err)
    }
    console.log("打开文件成功!")
    fs.read(fd,buf,0,buf.length,0,function(err,bytes){
        if(err){
            return console.error(err);
        }
        if(bytes > 0){
            let str = buf.slice(0,bytes).toString();
            console.log("读取的内容是:",str);
        }
    })
    fs.close(fd,function(err){
        if(err){
            return console.error(err)
        }
        console.log("文件关闭成功!")
    })
    console.log("----End----");
})

(7)创建目录(文件夹)

fs.mkdir(path[, mode], callback)

"path":要创建的包括路径的目录名
"mode":目录的权限,默认是可读可写的
"callback":回调函数	
const fs = require("fs");

fs.mkdir("./xian",function (err){
    if(err){
        return console.error(err)
    }
    console.log("创建目录成功!")
})

(8)删除目录

rmidr(path,callback)
const fs = require("fs");

fs.mkdir("./xian",function (err){
    if(err){
        return console.error(err)
    }
    console.log("创建目录成功!")
})

fs.rmdir("./text",function(err){
    if(err){
        return console.error(err)
    }
    console.log("删除成功!")
})

(9)读取目录

readdir(path,callback)

"path":目录名
"callback":回调函数,有两个参数(err,files),"files"是列表,放的是当前目录下的文件和文件夹的名称
const fs = require("fs");

fs.readdir("./xian",function(err,files){
    if(err){
        return console.error(err)
    }
    files.forEach(function(file){
        console.log(file)
    })
})

(10)文件复制

fs.copyFile(源文件,目标文件,回调函数)
const fs = require("fs");

fs.copyFile("./input.txt","./target.txt",function(err){
    if(err){
        return console.error(err)
    }
    console.log("文件拷贝成功!")
})

(11)给文件追加内容

给文件中追加内容:将内容添加到文件的末尾,若给定的文件不存在则创建文件,创建的新文件名就是给定的文件名

fs.appendFile(filename,content,callback)

"content":追加的内容
const fs = require("fs");

let content = "\n野火烧不尽,\n春风吹又生"

fs.appendFile("./input.txt",content,function(err){
    if(err){
        return console.error(err);
    }
    console.log("追加内容成功!")
})

(12)删除文件

fs.unlink(path,callback)

"path":带路径的文件名
"callback":回调函数,没有参数 
const fs = require("fs");

fs.unlink("./target.txt",function(err){
    if(err){
        return console.error(err)
    }
    console.log("删除文件成功!")
})

(13)文件重命名

rename(oldPath,newPath,callback)

"oldPath":原文件名
"newPath":新文件名
"callback":回调函数
const fs = require("fs");

fs.rename("./input.txt","./test.txt",function(err){
    if (err){
        return console.error(err)
    }
    console.log("重命名成功!")
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值