fs模块(2)常用的增删改查

184 阅读4分钟

模块化

node.js中把一系列相同类型的功能封装到相同的模块中

fs模块就是对文件进行操作(增删改查)

readFile()读取文件

fs.readFile(path,(err,data)=>{})

path:填路径,可以绝对可以相对

err:代表读取失败

data:代表读取成功 ,它是一个buffer类型的数据(二进制数据流) 可以通过toString()转化为字符串

注意:不能读取文件夹,只能读取文件

let fs=require("fs");
let path=__dirname;
fs.readFile(path,(err,data)=>{
    console.log(111,err);
    console.log(222,data)
});

__dirname:是当前运行的js文件所在的文件夹的绝对路径,获取的就是当前运行的js文件所在的文件夹,所以读取失败。

image.png

readFile()是异步任务,当有读取多个文件的任务时会一起开启任务读取文件,哪一个的文件先读取完毕哪一个readFile()方法就先回到js单线程,执行回调函数。当同时回到主线程时,就谁先写的代码谁先开启的任务就谁先回到js单线程去执行回调函数。

fs.writeFile()写入文件(创建文件)

fs.writeFile(path,data,callback(err))

let fs=require("fs");
fs.writeFile(__dirname+"/a.txt","AOTU",(err)=>{
    console.log(err);
});

1.如果文件存在,该方法写入的内容会覆盖旧的文件内容(会将旧的文件内容全部清除然后把写入的内容重新写到文件中),不存在就创建一个新的并写入内容。

2.该方法如果文件夹不存在就会报错,如果文件不存在就会创建并写入内容到创建的文件中。

path:文件路径

data:要写入文件的数据,可以是 String(字符串)

callback:回调函数,回调函数只包含错误信息参数(err),在写入失败时err就有数据然后返回,写入成功了err就返回null。

fs.unlink()删除文件

fs.unlink(path,callback(err))

path:文件路径

callback(err):回调函数,回调函数只包含错误信息参数(err),在写入失败时err就有数据然后返回,删除成功了err就返回null。

该方法删除的是资源文件在磁盘中的指针并不是真正的删除磁盘中的资源文件,可以通过某些技术手段去恢复删除的文件

fs.appendFile()以追加方式写文件

fs.appendFile(path,data,callback(err))

path:文件路径

data:要写入文件的数据,可以是 String(字符串)

callback:回调函数,回调函数只包含错误信息参数(err),在写入失败时err就有数据然后返回,写入成功了err就返回null。

同fs.writeFile()方法一样没有的文件就会创建并写入内容到文件中,唯一的区别在于fs.appendFile()方法是将内容拼接到文件中,而不是覆盖。

创建目录

fs.mkdir(path,callback(err))

path:要创建的文件夹的目录

callback:回调函数,回调函数只包含错误信息参数(err),创建成功返回null。

fs.mkdir(__dirname+"/src",(err)=>{
    console.log(err);
});

就是在当前运行的js文件的文件夹下创建一个src的文件夹。在错误的文件夹下创建文件夹会报错

fs.rename()移动/重命名文件或目录

fs.rename()整个功能相当于重命名一个文件/文件夹路径

fs.rename(oldPath, newPath, callback);

oldPath:原目录/文件的完整路径及文件或文件夹的名字;

newPath:新目录/文件的完整路径及文件或文件夹的名字;如果新路径与原路径相同,而只是文件或文件夹的名字不同,则是重命名,路径不相同就是移动文件或文件夹

callback(err):操作完成回调函数,失败err返回操作失败对象,成功返回null。

> 移动文件有一个bug:新路径和旧路径必须是同一个根盘跨盘操作会失败,如果新路径和旧路径一个在C盘一个在D盘就会操作失败。重命名文件的时候,文件的编码依然存在就是即使改了文件的后缀名,文件的内容依旧不会发生改变。

拷贝文件fs.copyFile()

fs.copyFile(oldPath, newPath, callback);

oldPath:原文件的完整路径;

newPath:新文件的完整路径;

callback(err):操作完成回调函数,失败err返回操作失败对象,成功返回null

拷贝文件以后两个文件都会存在磁盘中需要删除原副本,拷贝的是文件

let fs=require("fs");
let oldpath=__dirname+"src/1.jpg";
let newpath=__dirname+"src/a/1.jpg";
fs.copyFile(oldpath,newpath,(err)=>{
   if(!err){
        fs.unlink(oldpath,()=>{});
   };
});

fs.readdir()读取文件夹(目录)

fs.readdir(path,callback(err,arr))会读取文件夹的内容(内容就是全部的文件和子文件夹),并返回它们的相对路径。

path:要创建的文件夹的目录

callback:回调函数,回调函数只包含错误信息参数(err),操作成功返回null,arr就是返回的文件夹全部的文件和子文件夹名字的数组。

image.png