Módulo fs de Node.js [Nota 2]

Módulo fs para Node.js (API fs)

fs: sistema de archivos El
módulo fs del sistema de archivos puede interactuar con el disco duro. Por ejemplo, creación, eliminación, cambio de nombre y movimiento de archivos, así como escritura y lectura del contenido de archivos y operaciones relacionadas con carpetas.

1.Escribir al archivo

método ilustrar
escribir archivo Escritura asincrónica
escribirFileSync Escritura sincrónica
agregarArchivo /appendFileSync anexar escribir
crearWriteStream Escritura en streaming
//文件名:nodejs-fs/code/1-文件写入.js
/** 文件写入需求: 
 * 新建一个文件,座右铭.txt,写入内容:三人行,则必有我师焉。
 */

// 1.导入fs模块
const fs = require('fs'); //require 是 Node.js 环境中的全局函数,用于导入模块

//2.写入文件
fs.writeFile('./座右铭.txt','三人行,则必有我师焉。', err => {
    
    
    //写入失败时,回调函数调用时,会传入错误对象;写入成功,会传入null
    if(err){
    
    
        console.log('写入失败');
        return;
    }
    console.log('写入成功');
});

1.1 escritura asincrónica de writeFile

Sintaxis: fs.writeFile(archivo, datos[, opciones], devolución de llamada)
Descripción del parámetro:

  • nombre del archivo
  • datos datos a escribir
  • opción configuración de opción (opcional)
  • devolución de llamada escribir devolución de llamada

Valor de retorno: indefinido

1.2 escritura sincrónica writeFileSync

1.3 appendFile /appendFileSync anexar escritura

//文件名:nodejs-fs/code/2-追加写入.js
const fs = require('fs');	//导入fs模块

//3.追加写入
fs.appendFile('./座右铭.txt','择其善者而从之,择其不善者而改之', err => {
    
    
    if(err){
    
    
        console.log('写入失败');
        return;
    }
    console.log('追加写入成功');
});

fs.appendFileSync('./座右铭.txt','\r\n 温故而知新,可以为师矣。');

// writeFile 实现追加写入
fs.writeFile('./座右铭.txt','one two',{
    
    flag: 'a'}, err => {
    
    
    //写入失败时,回调函数调用时,会传入错误对象;写入成功,会传入null
    if(err){
    
    
        console.log('写入失败');
        return;
    }
    console.log('写入成功');
});

1.4 escritura de transmisión createWriteStream

Sintaxis: fs.createWriteStream (ruta[, opciones])
Descripción del parámetro:

  • ruta ruta del archivo
  • opción configuración de opción (opcional)

Valor de retorno: objeto

//文件名:nodejs-fs/code/3-流式写入.js
const fs = require('fs');	//导入fs模块

//4. createWriteStream  流式写入
const ws = fs.createWriteStream('./观书有感.txt');
//write
ws.write('一去二三里\r\n');
ws.write('烟村四五家\r\n');
ws.write('亭台六七座\r\n');
ws.write('八九十之花\r\n');
//关闭通道
ws.close();	//可不加这一句

1.5 Escenarios de aplicación de escritura de archivos

Cuando necesite conservar datos , debería pensar en escribir archivos

La escritura de archivos es una operación muy común en las computadoras y se utiliza en los siguientes escenarios:

  • descargar archivo
  • instalar software
  • Guardar registros de programas, como Git
  • Guardar archivo del editor

2. Lectura de archivos

Lectura de archivos: Es recuperar los datos del archivo a través de un programa, se pueden utilizar los siguientes métodos:

método ilustrar
leer archivo Lectura asincrónica
leerFileSync Lectura sincrónica
crearReadStream lectura en streaming

2.1 lectura asincrónica de readFile

Sintaxis: fs.readFile (ruta[, opciones],devolución de llamada)
Descripción del parámetro:

  • ruta ruta del archivo
  • opción configuración de opción (opcional)
  • función de devolución de llamada

Valor de retorno: indefinido

//文件名:nodejs-fs/code/4-文件读取.js
const fs = require('fs');	//导入fs模块

//2.1 readFile 异步读取
fs.readFile('./观书有感.txt', (err,data) => {
    
    
    if(err) throw err;
    console.log(data);
    console.log(data.toString());
}); 

2.2 lectura sincrónica readFileSync

//文件名:nodejs-fs/code/4-文件读取.js
const fs = require('fs');	//导入fs模块

//2.2 readFileSync 同步读取
let data = fs.readFileSync('./观书有感.txt');
console.log(data);
console.log(data.toString());

2.3 lectura de transmisión createReadStream

//文件名:nodejs-fs/code/5-流式读取.js
const fs = require('fs');	//导入fs模块

//2.3 createReadStream 流式读取
//创建读取流对象
const rs = fs.createReadStream('爱你.mp4');
//绑定 data 事件; chunk 块儿
rs.on('data',chunk => {
    
    
    console.log(chunk);
    console.log(chunk.length); //65536 字节 => 64 KB
})

// end 事件 可选
rs.on('end',() => {
    
    
    console.log('读取完成');
})

2.4 Escenarios de aplicación de lectura de archivos

  • La computadora se inicia
  • Programa en ejecución
  • El editor abre el archivo
  • Ver fotos
  • reproduce el video
  • reproducir música
  • Registro de vista de Git
  • subir archivos
  • Ver historial de chat

3. Copiar archivos, cambiarles el nombre y moverlos

Copia de archivo:

//文件名:nodejs-fs/code/6-文件复制.js
/** 文件复制需求: 
 * 复制 【爱你.mp4】
 */
const fs = require('fs');	//导入fs模块
//process是Node.js内置模块;memoryUsage是process的一个方法,获取内存占用量
const process = require('process');     

//方式一 readFile
let data = fs.readFileSync('./爱你.mp4');   //读取文件内容
fs.writeFileSync('./资料/爱你.mp4', data);  //写入文件
console.log(process.memoryUsage());     //rss:50020352 字节
/**
 {
  rss: 50020352,
  heapTotal: 6438912,
  heapUsed: 5848504,
  external: 20551626,
  arrayBuffers: 20120219
}
 */
 
//方式二 流式操作 【该方式更好,所占资源少】
const rs = fs.createReadStream('./爱你.mp4');           //创建读取流对象
const ws = fs.createWriteStream('./资料/爱你1.mp4');    //创建写入流对象
//绑定 data 事件
rs.on('data',chunk => {
    
    
    ws.write(chunk);
});
rs.on('end',() => {
    
    
    console.log(process.memoryUsage());		//rss: 43552768 字节
});

//方式三 流式操作 【该方式用的不多】
const rs = fs.createReadStream('./爱你.mp4');           //创建读取流对象
const ws = fs.createWriteStream('./资料/爱你2.mp4');    //创建写入流对象
rs.pipe(ws);

Cambio de nombre y movimiento de archivos:

//文件名:nodejs-fs/code/7-文件重命名与移动.js
/** 文件重命名需求: 
 * 座右铭.txt 重命名为 论语.txt 
 */
const fs = require('fs');	//导入fs模块

//调用 rename 方法 进行文件重命名
fs.rename('./座右铭.txt','./论语.txt', err => {
    
    
    if(err){
    
    
        console.log('操作失败');
        return;
    }
    console.log('操作成功');
});

//文件的移动
fs.rename('./遇见.mp3','./资料/遇见.mp3', err => {
    
    
    if(err){
    
    
        console.log('操作失败');
        return;
    }
    console.log('操作成功');
});  

4.Eliminación de archivos

En Node.js, puede usar unlink, unlinkSync, rm, rmSync para eliminar archivos.
Sintaxis:
fs.unlink(path,callback)
fs.unlinkSync(path)
fs.rm(path,callback)
fs.rmSync(path)
parámetro descripción:

  • ruta ruta del archivo
  • función de devolución de llamada
//文件名:nodejs-fs/code/8-删除文件.js
const fs = require('fs');	//导入fs模块
// 调用 unlink 方法 unlinkSync
fs.unlink('./资料/爱你.mp4', err => {
    
    
    if(err){
    
    
        console.log('删除失败');
        return;
    }
    console.log('删除成功');
});
fs.unlinkSync('./爱你.mp4');

// 调用 rm 方法 Node.js的14.4版本引入  rmSync
fs.rm('./资料/爱你2.mp4', err => {
    
    
    if(err){
    
    
        console.log('删除失败');
        return;
    }
    console.log('删除成功');
});
fs.rmSync('./资料/爱你1.mp4');

5. Operaciones de carpetas

Con la ayuda de las capacidades de Node.js, se pueden crear, leer, eliminar archivos y realizar otras operaciones.

método ilustrar gramática
mkdir Crear carpeta mkdir(ruta[, opciones],devolución de llamada)
mkdirSync Crear carpeta mkdirSync(ruta[, opciones])
leerdir Leer carpeta readdir(ruta[, opciones],devolución de llamada)
readdirSync Leer carpeta readdirSync(ruta[, opciones])
es rm eliminar carpeta rmdir(ruta[, opciones],devolución de llamada)
rmdirSync eliminar carpeta rmdirSync(ruta[, opciones])
//文件名:nodejs-fs/code/9-文件夹操作.js
const fs = require('fs');	//导入fs模块

//创建文件夹; mk make 制作;dir directory 文件夹
fs.mkdir('./html', err => {
    
    
    if(err){
    
    
        console.log('创建失败');
        return;
    }
    console.log('创建成功');    
});

//递归创建文件夹
fs.mkdir('./a/b/c',{
    
    recursive: true}, err => {
    
    
    if(err){
    
    
        console.log('创建失败');
        return;
    }
    console.log('创建成功');    
});

//读取文件夹
fs.readdir('./资料', (err,data) => {
    
    
    if(err){
    
    
        console.log('读取失败');
        return;
    }
    console.log(data);   
}); //结果为 [ '爱你1.mp4', '爱你2.mp4', '遇见.mp3' ]

//删除文件夹 rm remove 移除
fs.rmdir('./html', err => {
    
    
    if(err){
    
    
        console.log('删除失败');
        return;
    }
    console.log('删除成功');   
});

//递归删除文件夹 【不推荐使用】
fs.rmdir('./a',{
    
    recursive: true}, err => {
    
    
    if(err){
    
    
        console.log('删除失败');
        return;
    }
    console.log('删除成功');   
});

//递归删除文件夹 【推荐使用】
fs.rm('./a',{
    
    recursive: true}, err => {
    
    
    if(err){
    
    
        console.log('删除失败');
        return;
    }
    console.log('删除成功');   
});

Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí

6. Verifique el estado de los recursos

En Node.js, puede usar stat y statSync para ver los detalles de los recursos.
Sintaxis:
fs.stat (ruta[, opciones], devolución de llamada)
fs.statSync (ruta[, opciones])

//文件名:nodejs-fs/code/10-查看资源信息.js
const fs = require('fs');	//导入fs模块

// stat 方法 status 缩写 状态
fs.stat('./资料/爱你1.mp4', (err,data) => {
    
    
    if(err){
    
    
        console.log('操作失败');
        return;
    }
    console.log(data);   
    console.log(data.isFile());         //isFile检测是否为文件
    console.log(data.isDirectory());    //isDirectory检测是否为文件夹
});
/*结果如下:
Stats {
  dev: 177919585,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: 4096,
  ino: 1125899907180791,
  size: 20102613,							 //文件大小
  blocks: 39264,
  atimeMs: 1685517209138.5369,
  mtimeMs: 1685517209138.5369,
  ctimeMs: 1685517209138.5369,
  birthtimeMs: 1685516572800.8633,
  atime: 2023-05-31T07:13:29.139Z,
  mtime: 2023-05-31T07:13:29.139Z,			//最后修改时间
  ctime: 2023-05-31T07:13:29.139Z,
  birthtime: 2023-05-31T07:02:52.801Z		//创建时间
}
true
false
*/

7. Problema de ruta relativa

Cuando el módulo fs opera con recursos, hay dos formas de escribir la ruta:

camino relativo:

  • ./motto.txt: lema.txt en el directorio actual
  • Motto.txt: equivalente al escrito anterior
  • . ./motto.txt: motto.txt en el directorio un nivel por encima del directorio actual

Camino absoluto:

  • D:/Archivos de programa: ruta absoluta en el sistema Windows
  • /usr/bin: ruta absoluta en el sistema Linux

El llamado directorio actual en una ruta relativa se refiere al directorio de trabajo de la línea de comando, no al directorio donde se encuentra el archivo;
por lo tanto, cuando el directorio de trabajo de la línea de comando no coincide con el directorio donde se encuentra el archivo, Pueden ocurrir algunos ERRORES.

8._ _dirame [Errores y soluciones a rutas relativas]

//文件名:nodejs-fs/code/12-相对路径的BUG.js
const fs = require('fs');

//相对路径参照物:命令行的工作目录
fs.writeFileSync('./index.html','love');

//绝对路径 ‘全局变量’保存的是:所在文件的所在目录的绝对路径
console.log(__dirname);
fs.writeFileSync(__dirname + '/index.html','love');

9. Ejercicio: cambio de nombre por lotes

//文件名:nodejs-fs/1-重命名.js
const fs = require('fs');
//读取 code 文件夹
const files = fs.readdirSync('./code');
console.log(files);

//遍历数组
files.forEach(item => {
    
    
// 拆分文件名
let data = item.split('-');
let [num, name] = data;
//判断
if(Number(num) < 10){
    
    
	num = '0' + num;
}
//创建新的文件名
let newName = num + '-' + name;
//重命名
fs.renameSync(`./code/${
      
      item}`, `./code/${
      
      newName}`);
});

Supongo que te gusta

Origin blog.csdn.net/qq_41361442/article/details/130975072
Recomendado
Clasificación