Maison  >  Article  >  interface Web  >  Résumé de l'utilisation des opérations de fichiers locaux dans Node.js program_node.js

Résumé de l'utilisation des opérations de fichiers locaux dans Node.js program_node.js

WBOY
WBOYoriginal
2016-05-16 15:11:481553parcourir

Ce dont Node est le plus fier, c'est qu'il a un très petit noyau. Alors que certains langages disposent de liaisons API POSIX complètes, Node implémente le moins de liaisons possible et les expose via des API synchrones, asynchrones ou en streaming.

Cette approche signifie que certaines fonctionnalités très pratiques du système d'exploitation doivent être reconstruites dans Node. Il s'agit d'un didacticiel pratique qui vous apprend à utiliser les packages du système de fichiers.


Citer des fichiers
Il est important lors de l'interaction avec le système de fichiers de pointer vers le bon fichier. Étant donné que les packages NPM utilisent des références de chemin relatif, vous ne pouvez pas coder en dur le chemin. Il existe deux manières principales de garantir que les packages référencent les bons fichiers :

// 使用 `path.join()` 而不是 `+` 确保Windows也能正常工作
const path = require('path')

// 找到基于调用点的相对路径,对于命令行程序(CLI applications)非常实用
path.join(process.cwd(), 'my-dynamic-file')
// 或者
path.resolve('my-dynamic-file')

// 基于一个文件找到另外一个文件
path.join(__dirname, 'my-package-file')


Lire le fichier
Le moyen le plus simple de lire des fichiers de manière asynchrone dans Node est d'utiliser des flux ! Voici un exemple :

const path = require('path')
const fs = require('fs')

// read a file and pipe it to the console
fs.createReadStream(path.join(__dirname, 'my-file'))
 .pipe(process.stdout)

Créer un fichier
Créer des fichiers n'est pas difficile. Voici une commande cat implémentée dans node :

const path = require('path')
const fs = require('fs')

// cat ./my-file > ./my-other-file
fs.createReadStream(path.join(__dirname, 'my-file'))
 .pipe(fs.createWriteStream(path.join(__dirname, './my-other-file')))

Supprimer des fichiers
Les fichiers et répertoires supprimés dans les scripts shell utilisent généralement la commande rm-rf. Un rimraf dans NodeJS implémente également la même fonction :

const rimraf = require('rimraf')
const path = require('path')

rimraf(path.join(__dirname, './my-directory'), err => {
 if (err) throw err
})


Créer un répertoire
La création et la suppression de fichiers sont très similaires, en utilisant le package mkdirp

const mkdirp = require('mkdirp')
const path = require('path')

mkdirp(path.join(__dirname, 'foo/bar'), err => {
 if (err) throw err
})

Rechercher des fichiers
Utilisez readdirp pour rechercher des fichiers dans le répertoire actuel :

const readdirp = require('readdirp')
const json = require('JSONStream')
const path = require('path')

// recursively print out all files in all subdirectories
// to the command line. The object stream must be
// stringified before being passed to `stdout`.
readdirp({ root: path.join(__dirname) })
 .pipe(json.stringify())
 .pipe(process.stdout)


Utilisez findup pour rechercher des fichiers dans le répertoire parent actuel :

const findup = require('findup')
const path = require('path')

// recurse up all files relative to __dirname and find
// all `package.json` files.
findup(path.join(__dirname), 'package.json', (err, res) => {
 if (err) throw err
 console.log('dir is: ' + res)
})


À propos des tuyaux

Il est très utile de gérer les erreurs de l'ensemble du flux de données une fois dans le pipeline. Au lieu d'utiliser .on('error', cb) pour chaque flux de données individuel :

const pump = require('pump')
const fs = require('fs')

// oh no, no errors are handled!
fs.createReadStream('./in.file').pipe(fs.createWriteStream('./out.file'))

// that's better, we're handing errors now
const rs = fs.createReadStream('./in.file')
const ws = fs.createWriteStream('./out.file')
pump(rs, ws, err => {
 if (err) throw err
})


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn