web前端开发之JavaScript:node.js文件系统 的写入与读取

举报
运气男孩 发表于 2020/08/30 23:51:39 2020/08/30
【摘要】 初略的介绍了web前端开发之node.js:node文件系统 的写入与读取

文件系统 

Node 通过封装基本的POSIX函数来提供文件系统,使用require('fs')来使用这个模块,所有与文件相关的方法,都提供了异步和同步的形式。 异步的方法通常会将一个可选的回调函数作为最后一个参数,回调函数的第一个参数通常留给意外情况,如果操作是成功的,第一个参数将是null或者undeefined。 使用同步方法,对于任何意外都会即时抛出,可以使用try/catch语句来处理意外情况,或者让错误时间向上冒泡。

使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载

  const fs = require("fs");

fs模块中所有的操作都有两种形式可供选择,同步和异步。
,也就是除非操作完毕,否则不会向下执行代码。异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。

同步文件写入

打开文件

 fs.openSync(path,flags[,mode]);

-path 要打开文件的路径

-flages 打开文件要做的操作的类型

r 只读的

w 可写的

-mode 设置文件的操作权限,一般不传
返回值 该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作

向文件中写入内容

 fs.writeSync(fd,string[,position[,encoding]]);

-fd 文件的描述符,需要传递要写入的文件的描述符

-string 要写入的内容

-position 写入的起始位置,一般不传

-encoding 写入的编码,默认utf-8,一般不传

保存并关闭文件

fs.closeSync(fd);

-fd 要关闭的文件描述符

 var fs = require("fs");

 //打开文件
 var fd = fs.openSync("hello.txt",w);

 //向文件中希尔内容
 var fw = fs.writeSync(fd,"hello fs");

 //关闭文件
 var fc = fs.closeSync(fd);

异步文件写入

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

-用来打开一个文件

-异步调用的方法,结果都是通过回调函数的参数返回的

-回调函数的两个参数:

err 错误对象,如果没有错误则为null

fd 文件描述符

1)fs.write(fd,string[,option[0,encoding]],callback)

2)fs.close(fd,callback)

-fd 文件描述符

//引入fs模块
var fs = require("fs");
var f;

//打开文件
fs.open("hello2.txt","w",function(err,fd){
    //判断是否出错
    if(!err){
       //如果没有出错,则对文件进行写入操作
       fs.write(fd,"这是异步写入内容",function(err){
           if(!err){
               console.log("写入成功")
           }
           //关闭文件
           fs.close(fd,function(err){
               if(!err){
                   console.log("文件已关闭");
               }
           })
       });
    }else{
        console.log(err);
    }
});
console.log(f);

简单文件写入

异步 fs.writeFile(file,data[,options],callback)

同步 fs.writeFileSync(file,data[,options])

-file 要操作的文件路径

-data 要写入的数据

-options 选项,可以对写入进行一些设置

-callback 当写入完成以后执行的函数

var fs = require("fs");
fs.writerFile("hello3.txt","这是通过writeFile写入的内容",function(){
    if(!err){
        console.log("写入成功");
    }
})

流式文件写入

  1. 同步、异步和简单文件写入都不适合大文件的写入,性能较差,容易导致内存溢出。

  2. 创建一个可写流

fs.createWriteStream(path[,options])

-path 文件路径
-options 配置的参数

var fs = require("fs");

//流式文件写入
//创建一个可写流
var ws = fs.createWriteStream("hello3.txt");

//可以通过监听流的open和close事件来监听流的打开和关闭
ws.once("open",function(){
    console.log("流打开了");
});
ws.once("close",function(){
    console.log("流关闭了");
});
//通过ws向文件中输出内容
ws.write("通过可写流输入的文件内容");

//关闭流
ws.end();

文件读取

同步文件读取

与同步文件写入一致

异步文件读取

与异步文件写入一致

简单文件读取

  • fs.readFile(path[,options],callback)

  • fs.readFileSync(path[,options])
    -path 要读取文件的路径
    -options 读取的选项
    -callback 回调函数,通过回调函数将读取到的内容返回(err,data)
    data 读取到的数据,会返回一个Buffer

    var fs = require("fs");
    fs.readFile("hello.txt",function(err,data){
       if(!err){
           console.log(data.toString());
       }
    });

流式文件读取

  • 流式文件读取也可以适用于一些较大的文件,可以分多次将文件读取到内存中

var fs = require("fs");

//创建一个可读流
var rs = fs.createReadStream("an.jpg");

//监听流的开启和关闭
rs.once("open",function(){
    console.log("可读流打开了~~");
})

rs.once("close",function(){
    console.log("可读流关闭了~~")
})

//如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,会自动开始读取数据

rs.on("data",function(data){
    console.log(data);
})

//pipe()可以将可读流中的内容,直接输出到可写流中
rs.pipe(ws);

fs模块的其他方法

验证文件是否存在

fs.exists(path,callback)(已废弃)

fs.existsSync(path)(常用)

获取文件状态

fs.stat(path,callback)

fs.statSync(path)

stat.isFile() 是否是文件

stat.isDirectory() 是否是一个文件夹

fs.stat("a.mp3",function(err,data){
    console.log(stat.data)
});

返回一个对象,在对象中保存了当前对象状态的相关信息

删除文件

fs.unlink(path,callback);

fs.unlinkSync(path);

fs.unlinkSync("hello.txt");

列出文件

fs.readdir(path[,options],callback)

fs.readdirSync(path[,options])

-读取一个目录的目录结构

files是 一个字符串数组,每一个元素就是一个文件夹或文件的名字

fs.readdir(".",function(err,files){
    if(!err){
        console.log(files);
    }
}
);

截断文件

fs.truncateSync(path,len,callback)

fs.truncate(path,len);

-截断文件,将文件修改为指定大小

fs.truncateSync("hello2.txt",10);

创建目录

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

fs.mkdirSync("hello")

删除一个目录

fs.rmdir(path,callback);

fs.rmdirSync(path);

重命名

fs.rename(oldPath,newPath,callback);

fs.renameSync(oldPath,newPath);

-oldPath 旧路径
-newPath 新路径
-callback 回调函数

fs.rename("1.txt","new1.txt",function(err){
    if(!err){
        console.log("修改成功~~");
        }
    }
});

监视文件修改

fs.watchFile(filename[,options],listener);

-filename 要监视的文件的名字
-options 需要配置的选项
-listener 回调函数,当文件发生变化时,回调函数执行,回调函数中有两个参数,curr 当前文件状态,prev修改前文件状态,这两个对象都是stats对象

fs.watchFile("hello2.txt",function(curr,prev){
    console.log("修改前文件大小:"+prev.size);
    console.log("修改后文件大小:"+curr.size);
});


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。