Aplicación básica del módulo fs de Nodejs

El módulo fs es un módulo integrado para las operaciones del sistema de archivos en Node.js, que proporciona varios métodos y funciones para manejar archivos y directorios.

Tabla de contenido

1. Escribir en el archivo

2. Hablar de síncrono y asíncrono

3. Escritura adicional

4. Leer el archivo

5. Cambio de nombre y movimiento de archivos

6. Eliminación de archivos

7. Operación de carpetas


1. Escribir en el archivo

Método de escritura ordinario:

Se utilizan fs.writeFile() y fs.writeFileSync() del módulo fs,其中前者是异步方法,后者是同步方法。

语法格式:下面的代码执行会找到对应的文件写入str字符串,如果没有该文件,则会自动创建文件并写入,但是这种写入会将原来的文件直接覆盖掉。

异步方法:

const fs = require('fs')
let str = 'hello'
//会直接覆盖写入,如果没有文件夹会自动创建新的文件夹
fs.writeFile('1.txt', str, (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('写入成功1')
})

Método de sincronización:

Debido a que el método síncrono no tiene una función de devolución de llamada de error, aquí debemos recibir manualmente el error

const fs = require('fs')
try {
  fs.writeFileSync('1.txt', '11223344')
  console.log('文件写入成功')
} catch (error) {
  console.error('文件写入失败:', error)
}

 Streaming escribe:

const fs = require('fs')
let ws = fs.createWriteStream('1.txt')
ws.write('111\n')
ws.write('222\n')
ws.close()

 La diferencia entre la escritura de transmisión y la escritura normal:

  1. Método de escritura: el método común para escribir archivos es cargar los datos que se escribirán en la memoria al mismo tiempo y luego escribir todo el bloque de datos en el archivo. El método de escritura de flujo consiste en escribir gradualmente datos en el archivo y solo escribir una pequeña parte de los datos a la vez.

  2. Uso de la memoria: el método común de escritura de archivos necesita cargar todos los datos en la memoria antes de escribirlos, por lo que al escribir una gran cantidad de datos, puede ocupar más memoria. Sin embargo, el método de escritura de secuencias escribe datos paso a paso y solo necesita que una pequeña parte de los datos se almacene en la memoria, por lo que ocupa menos memoria.

  3. Escalabilidad: el método de escritura de archivos ordinario es adecuado para escribir pequeños volúmenes de datos, mientras que el método de escritura de archivos de transmisión es adecuado para escenarios con grandes volúmenes de datos o escritura en tiempo real. Las escrituras de transmisión pueden escribir datos en archivos en tiempo real y son adecuadas para procesar archivos grandes o situaciones que requieren una escritura continua, como registradores o flujos de datos en tiempo real.

  4. Rendimiento y eficiencia: el método común de escritura de archivos puede tener un largo tiempo de espera cuando se escribe una gran cantidad de datos, porque todos los datos deben escribirse a la vez. El método de escritura de secuencias logra la escritura en tiempo real mediante la escritura gradual de secuencias de datos y tiene un mejor rendimiento y eficiencia al procesar grandes cantidades de datos.

En resumen, el método ordinario de escribir en un archivo es adecuado para escribir una sola vez una pequeña cantidad de datos, mientras que el método de transmisión en un archivo es adecuado para situaciones en las que es necesario procesar o escribir una gran cantidad de datos. en tiempo real. La escritura de secuencias en archivos puede proporcionar un mejor rendimiento y escalabilidad, y consumir menos memoria cuando la cantidad de datos es grande.

2. Hablar de síncrono y asíncrono

De hecho, puede ver que uno de los métodos de escritura anteriores es síncrono y el otro es asíncrono. ¿Cuál es la diferencia entre ellos o cuándo debo usarlos?

Proceso de implementación:

Todos deben ser conscientes del flujo de ejecución del código js, ​​que se ejecuta secuencialmente de arriba a abajo, este es el caso de la sincronización, se ejecuta en secuencia, es decir, al llamar a un método de sincronización, el programa esperará el método. para completar antes de continuar con la ejecución de una declaración. Un método asincrónico, por otro lado, no bloquea y regresa inmediatamente sin esperar a que se complete la operación. Un método asincrónico generalmente acepta una función de devolución de llamada o devuelve un objeto Promise. Cuando se completa la operación, el resultado se procesará a través de la función de devolución de llamada o el mecanismo de procesamiento de Promise.

Podemos ver el flujo de ejecución a través del siguiente código de ejemplo 

const fs = require('fs')
let str = 'hello'
//会直接覆盖写入,如果没有文件夹会自动创建新的文件夹
fs.writeFile('1.txt', str, (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('异步写入成功')
})

try {
  fs.writeFileSync('1.txt', '11223344')
  console.log('同步写入成功')
} catch (error) {
  console.error('文件写入失败:', error)
}

console.log('全部代码执行完毕')

 

Se puede ver que el siguiente código se ejecuta después de que se completa la escritura síncrona, y el método asíncrono se ejecuta en último lugar, y no afectará el proceso de ejecución de todo el código. A partir de esto, podemos suponer que si el archivo escribimos es muy grande, el uso de un método síncrono bloqueará temporalmente el código, pero el asíncrono no tendrá ese problema.

De esto se puede concluir que el método síncrono puede ser más conveniente e intuitivo, especialmente en scripts simples o programas con una lógica de procesamiento relativamente simple, pero si se trata de archivos grandes, se recomienda utilizar el método asíncrono.

3. Escritura adicional

Método asíncrono:

Nuestros archivos escritos anteriores se sobrescriben y escriben. Después de la ejecución, los archivos anteriores se sobrescribirán. Para implementar la escritura adicional, se requiere el siguiente método, donde \r\n significa nueva línea

const fs = require('fs')
fs.appendFile('1.txt', '\r\n111', (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('追加成功')
})

Método de sincronización:

try {
  fs.appendFileSync('1.txt', '\r\n222')
  console.log('同步追加成功')
} catch (error) {
  console.error('文件写入失败:', error)
}

4. Leer el archivo

La lectura de archivos también es síncrona y asíncrona.

const fs = require('fs')
//异步读取
fs.readFile('./1.txt', (err, data) => {
  if (err) {
    console.log(err)
    return
  }
  console.log(data.toString())
})
//同步读取
let data = fs.readFileSync('./1.txt', 'utf-8')
console.log(data.toString())

Transmisión de lectura:

const fs = require('fs')
let rs = fs.createReadStream('./1.txt')
rs.on('data', (chunk) => {
  console.log(chunk.toString())
})
rs.on('end', () => {
  console.log('读取完成')
})
rs.on('error', (err) => {
  console.log(err)
})

La diferencia más significativa entre la lectura en streaming y los métodos de lectura ordinarios sigue siendo la cuestión de la velocidad.

5. Cambio de nombre y movimiento de archivos

renombrar archivo

const fs = require('fs')
fs.rename('./1.txt', './修改.txt', (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('重命名成功')
})

movimiento de archivos

De hecho, el método de cambio de nombre se utiliza para mover la posición


fs.rename('./修改.txt', '../test/1.txt', (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('重命名成功')
})

6. Eliminación de archivos

Ambos métodos están disponibles

const fs = require('fs')
fs.unlink('./2.txt', (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('删除成功')
})

fs.rm('./1.txt', (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('删除成功')
})

7. Operación de carpetas

crear carpeta

const fs = require('fs')
fs.mkdir('./html', (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('创建成功')
})

Crear recursivamente, es decir, crear una carpeta con una estructura multicapa

const fs = require('fs')
//递归创建

fs.mkdir('./a/b/c', { recursive: true }, (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('创建成功')
})

 Leer el contenido del directorio de carpetas.

const fs = require('fs')
//读取文件夹
fs.readdir('../fs模块', (err, files) => {
  if (err) {
    console.log(err)
    return
  }
  console.log(files)
})

resultado de la operación

 Eliminar carpetas (solo se pueden eliminar carpetas de un solo nivel)

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

Eliminar carpetas recursivamente en una estructura de varios niveles

const fs = require('fs')
//递归删除 官方不建议使用此方法,未来会被删除
fs.rmdir('./html', { recursive: true }, (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('删除成功')
})

//官方建议删除方法
fs.rm('./a', { recursive: true }, (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('删除成功')
})

Supongo que te gusta

Origin blog.csdn.net/m0_64642443/article/details/132083945
Recomendado
Clasificación