>  기사  >  웹 프론트엔드  >  Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

青灯夜游
青灯夜游앞으로
2021-08-18 10:22:482329검색

이 글에서는 Nodejs의 파일 작업(디렉토리/파일 생성 및 삭제, 이름 바꾸기, 콘텐츠 추가, 콘텐츠 읽기)을 소개하고 스트림에 대해 간략하게 설명합니다.

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

NodeJS 파일 작업

创建目录和文件

  • 我们可以使用fs.mkdir fs.writeFile来分别创建目录和文件。
  • mkdir()可以接收三个参数,第一个是路径,第二个是个可选项代表权限,这个我们一般不需要,第三个参数是一个回调函数,我们可以在这里面做一些处理。
/* learnNode.js */
let fs = require('fs');
fs.mkdir('js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('未出错')
  }
})
  • writeFile()可以接收四个参数,第一个是路径,第二个是文件内容,第三个可选项代表权限,第四个是回调函数。
/* learnNode.js */
let fs = require('fs');
fs.writeFile('./js/newJs.js','console.log("写入这个")',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('没出错')
  }
})

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

  • 可以看到我们成功创建了目录并写入了一个文件。

检测文件

  • 我们可以通过fs.stat来检测一个路径的文件是为目录还是文件,进而可以做一些操作。
/* learnNode.js */
let fs = require('fs');
fs.stat('./js/newJs.js', (error, stats) => {
  if(error) {
    console.log(error);
    return false;
  } else {
    console.log(`是否文件:${stats.isFile()}`); 
    console.log(`是否目录:${stats.isDirectory()}`); 
    return false;
  }
})
  • star()主要接收两个参数第一个是要检测的文件,第二个是一个回调函数,这个回调函数有两个参数,分别是err错误和stats对象,这个对象提供有关文件的信息,我们可以对这个对象信息来进行判断。

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

删除文件和删除目录

  • 既然我们可以使用NodeJS创建文件那当然我们也可以删除文件,主要使用的是fs.unlink``fs.rmdir这两个API
/* learnNode.js */
let fs = require('fs');
fs.unlink('./js/newJs.js', (err) => {
  if (err) throw err;
  console.log('文件已删除');
});
fs.rmdir('./js',(err)=>{
  if (err) throw err;
  console.log('目录已删除');
})
  • 这两个API都分别接收两个参数是路径和回调函数,执行node learnNode.js可以看到我们文件已经成功删除。

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

重命名

  • 我们可以使用fs.rename来对文件重命名。
/* learnNode.js */
let fs = require('fs');
fs.rename('oldJs.js','newJs.js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('未出错')
  }
})
  • rename()可以接收三个参数第一个是路径第二个是更改的名称,第三个是回调函数,值得注意的是,如果第一个参数和第二个参数对应的文件所在的位置不一样时,他不会重命名之前那个文件而是直接把文件剪切放到另一个地方。
/* learnNode.js */
let fs = require('fs');
fs.rename('newJs.js','./js/oldJs.js',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('剪切到js文件夹内了')
  }
})

追加内容

  • 上面我们说到创建文件的时候可以顺便写入东西,那么我们可不可以直接在文件追加文字呢?我们可以使用fs.appendFile
/* learnNode.js */
let fs = require('fs');
fs.appendFile('newJs.txt','我是追加的内容',(err)=>{
  if(err){
    console.log('出错')
  }else{
    console.log('追加内容')
  }
})
  • appendFile()可以接收三个参数,第一个是路径,第二个是内容,第三个是回调函数,执行node learnNode.js即可。

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

读取文件和读取目录

  • 以上都是对文件进行增删改的操作,我们现在还需要掌握一下读取内容,我们可以使用fs.readFilefs.readdir"]
이전 기사

우리는 모듈을 참조하려면 require 인데, 오늘 소개하고 싶은 주인공은 <code>NodeJS에 내장된 파일 모듈인 fs 모듈입니다. 이 모듈에는 많은 API가 있습니다. 코드>를 사용합니다. <img src="https://img.php.cn/upload/image/235/577/894/162925288115805Nodejs%20%ED%8C%8C%EC%9D%BC%20%EC%9E%91%EC%97%85%20%EB%B0%8F%20%EC%8A%A4%ED%8A%B8%EB%A6%BC(streams)%EC%9D%84%20%EB%B9%A0%EB%A5%B4%EA%B2%8C%20%EC%86%8C%EA%B0%9C%ED%95%A9%EB%8B%88%EB%8B%A4." title="162925288115805Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다." alt="Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.">

디렉토리 및 파일 생성Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

🎜 fs.mkdir fs.writeFile을 사용하여 디렉토리와 파일을 별도로 생성합니다. 🎜🎜mkdir()은 세 개의 매개변수를 받을 수 있습니다. 첫 번째 매개변수는 경로이고, 두 번째 매개변수는 권한을 나타내는 선택적 옵션입니다. 일반적으로 이는 필요하지 않으며, 세 번째 매개변수는 콜백 함수입니다. 여기에서 처리를 수행하세요. 🎜🎜
/* learnNode.js */
let fs = require(&#39;fs&#39;);
fs.readFile(&#39;newJs.txt&#39;, (err, data) => {
  if(err) {
    console.log(&#39;出错&#39;);
  } else {
    console.log("读取文件成功!");
    console.log(data);
  }
})
🎜🎜writeFile()은 4개의 매개변수를 받을 수 있습니다. 첫 번째는 경로, 두 번째는 파일 콘텐츠, 세 번째 옵션은 권한을 나타내고 네 번째는 콜백 함수입니다. 🎜🎜
/* learnNode.js */
let fs = require(&#39;fs&#39;);
fs.readdir(&#39;./&#39;, (err, data) => {
  if(err) {
    console.log(&#39;出错&#39;);
  } else {
    console.log("读取目录成功!");
    console.log(data);
  }
})
🎜Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.🎜 🎜🎜디렉토리를 성공적으로 생성하고 파일을 작성한 것을 볼 수 있습니다. 🎜🎜

🎜파일 감지🎜

🎜🎜 fs.stat를 사용하여 경로의 파일이 디렉터리인지 또는 파일을 선택한 다음 일부 작업을 수행할 수 있습니다. 🎜🎜
var fs = require("fs");
var data = &#39;&#39;;
// 创建可读流
var readerStream = fs.createReadStream(&#39;newJs.txt&#39;);
// 设置编码为 utf8。
readerStream.setEncoding(&#39;UTF8&#39;);
// 处理流事件 遇到有数据时执行这个
readerStream.on(&#39;data&#39;, function(chunk) {
  data += chunk;
  console.log(chunk,&#39;流遇到数据了&#39;)
});
// 处理流事件 流结束时执行这个
readerStream.on(&#39;end&#39;,function(){
  console.log(data,&#39;流结束了&#39;);
});
 // 处理流事件 流报错时执行这个
readerStream.on(&#39;error&#39;, function(err){
  console.log(err.stack);
});
console.log("程序执行完毕");
🎜🎜star()는 주로 두 개의 매개변수를 받습니다. 첫 번째는 감지할 파일이고 두 번째는 콜백 함수입니다. 이 콜백 함수에는 err 오류와 라는 두 개의 매개변수가 있습니다. >stats 객체, 이 객체는 파일에 대한 정보를 제공하므로 이 객체 정보를 판단할 수 있습니다. 🎜🎜🎜Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.🎜🎜파일 삭제 및 디렉터리 삭제🎜🎜🎜NodeJS를 사용하여 파일을 생성할 수 있으므로 물론 주로 다음을 사용하여 파일을 삭제할 수도 있습니다. fs.unlink``fs.rmdir이 두 API입니다. 🎜🎜
var fs = require("fs");
var data = &#39;我是小卢,我再写入流&#39;;
// 创建一个可以写入的流,写入到文件 newJs.txt 中
var writerStream = fs.createWriteStream(&#39;newJs.txt&#39;);
// 使用 utf8 编码写入数据
writerStream.write(data,&#39;UTF8&#39;);
// 标记文件末尾
writerStream.end();
// 处理流事件 完成和报错时执行
writerStream.on(&#39;finish&#39;, function() {
    console.log("写入完毕");
});
writerStream.on(&#39;error&#39;, function(err){
   console.log(err.stack);
});
console.log("程序执行完毕");
🎜🎜두 API는 각각 경로와 콜백 함수라는 두 개의 매개변수를 받습니다. node learnNode.js를 실행하면 파일이 성공적으로 삭제된 것을 확인할 수 있습니다. 🎜🎜🎜Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.🎜🎜Rename🎜🎜🎜fs.rename을 사용하여 파일 이름을 바꿀 수 있습니다. 🎜🎜rrreee🎜🎜rename()은 세 개의 매개변수를 받을 수 있습니다. 첫 번째는 경로, 두 번째는 변경된 이름, 세 번째는 콜백 함수입니다. 두 번째 매개변수에 해당하는 파일의 위치가 다를 경우, 이전 파일의 이름을 변경하지 않고 바로 파일을 잘라내어 다른 위치에 배치합니다. 🎜🎜rrreee

🎜콘텐츠 추가🎜

🎜🎜위에서 파일을 만들 때 내용을 작성할 수 있다고 언급했는데 파일에 직접 텍스트를 추가할 수 있나요? fs.appendFile을 사용할 수 있습니다. 🎜🎜rrreee🎜🎜appendFile()은 세 개의 매개변수를 받을 수 있습니다. 첫 번째는 경로, 두 번째는 콘텐츠, 세 번째는 콜백 함수입니다. node learnNode.js를 실행하세요. 코드> 코드>이면 충분합니다. 🎜🎜🎜<img src="https://img.php.cn/upload/image/847/247/243/162925287798940Nodejs%20%ED%8C%8C%EC%9D%BC%20%EC%9E%91%EC%97%85%20%EB%B0%8F%20%EC%8A%A4%ED%8A%B8%EB%A6%BC(streams)%EC%9D%84%20%EB%B9%A0%EB%A5%B4%EA%B2%8C%20%EC%86%8C%EA%B0%9C%ED%95%A9%EB%8B%88%EB%8B%A4." title="162925287798940Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다." alt="Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.">🎜🎜파일 읽기 및 디렉토리 읽기🎜🎜🎜위의 내용은 모두 파일 추가, 삭제, 수정 작업입니다. 이제 읽기 내용도 마스터해야 합니다. <code>fs.readFilefs.readdir는 각각 파일과 디렉터리를 읽습니다. 🎜🎜rrreee🎜🎜🎜rrreee🎜🎜🎜
  • 可以看到我们两个API都是接收两个参数,第一个是路径,第二个是回调函数,这个回调函数也有两个参数里面包含了data信息,我们可以打印这个data信息来获取内容。

stream(流)

  • 最后我们来简单聊聊stream,翻译过来就是的意思,提到流你会想到什么,河流,水流,都是从一个源头到另一个源头,就像水龙头从开关到流到地面,stream也是这样一个过程。
  • Stream 有四种流类型:
    • Readable - 可读操作。
    • Writable - 可写操作。
    • Duplex - 可读可写操作.
    • Transform - 操作被写入数据,然后读出结果。
  • 在stream的过程中,我们也有事件可以使用,比如检测到错误触发的error,有数据时触发的data
    • data - 当有数据可读时触发。
    • end - 没有更多的数据可读时触发。
    • error - 在接收和写入过程中发生错误时触发。
    • finish - 所有数据已被写入到底层系统时触发。
  • 接下来简单举个例子理解一下吧。

读取流

var fs = require("fs");
var data = &#39;&#39;;
// 创建可读流
var readerStream = fs.createReadStream(&#39;newJs.txt&#39;);
// 设置编码为 utf8。
readerStream.setEncoding(&#39;UTF8&#39;);
// 处理流事件 遇到有数据时执行这个
readerStream.on(&#39;data&#39;, function(chunk) {
  data += chunk;
  console.log(chunk,&#39;流遇到数据了&#39;)
});
// 处理流事件 流结束时执行这个
readerStream.on(&#39;end&#39;,function(){
  console.log(data,&#39;流结束了&#39;);
});
 // 处理流事件 流报错时执行这个
readerStream.on(&#39;error&#39;, function(err){
  console.log(err.stack);
});
console.log("程序执行完毕");
  • 我们一开始可以创建一个可读流fs.createReadStream(),参数是你要读的文件路径。
  • 当遇到了数据时会执行readerStream.on('data',callback()),如下图所示。
  • 当流结束时会执行readerStream.on('end',callback()),如下图所示。

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

写入流

  • 我们上面演示了如何通过流读取一个文件,接下来我们试试通过流写入文件。
var fs = require("fs");
var data = &#39;我是小卢,我再写入流&#39;;
// 创建一个可以写入的流,写入到文件 newJs.txt 中
var writerStream = fs.createWriteStream(&#39;newJs.txt&#39;);
// 使用 utf8 编码写入数据
writerStream.write(data,&#39;UTF8&#39;);
// 标记文件末尾
writerStream.end();
// 处理流事件 完成和报错时执行
writerStream.on(&#39;finish&#39;, function() {
    console.log("写入完毕");
});
writerStream.on(&#39;error&#39;, function(err){
   console.log(err.stack);
});
console.log("程序执行完毕");
  • 我们首先创建一个流,然后将data数据写入newJs.txt文件中。
  • 当流写入完毕时会执行readerStream.on('finish',callback()),如下图所示。

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

  • 可以看到该newJs.txt文件中已经存在了我们写入的数据。

Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.

写在最后

总的来说NodeJS提供了fs文件操作模块,这个模块有很多的API,上面只是简单的展示了一下,还有很多有趣的API大家只需要用到的时候去官网查就好了,因为NodeJS能操作文件,小至文件查找,大至代码编译。换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具。

原文地址:https://juejin.cn/post/6997204352683212831

作者:快跑啊小卢_

更多编程相关知识,请访问:编程视频!!

위 내용은 Nodejs 파일 작업 및 스트림(streams)을 빠르게 소개합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 掘金--快跑啊小卢_에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제