14-fs-写入文件操作|学习笔记

简介: 快速学习14-fs-写入文件操作

开发者学堂课程【Node.js 入门与实战:14-fs-写入文件操作】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/588/detail/8249


14-fs-写入文件操作


目录

一、文件读写

二、写文件具体方法

三、API稳定性

四、代码演示

 

一、文件读写

在浏览器中写 js 代码不能进行文件操作,因为浏览器不提供文件操作的 API ,如果浏览器提供文件操作的 API ,是比较危险的

比如网站上有一段 js 代码,js 代码读取磁盘上 c 盘 d 盘所有文件,然后把文件名称上传到服务器,访问网页就会执行 js 代码,js 代码会读取文件内容并且可能会在磁盘中编写病毒,显然这样是不安全的。所以浏览器端不为 js提供文件操作的 API

Node.js 下有提供文件操作的 API,可以通过 js 直接调用。

学习文件操作,文件读写的原因

Node.js 做 web 网站,web 服务器,当用户请求某个静态 html 页面时,需要读取磁盘上的 html 文件的源代码内容,把内容直接返回给浏览器。

就要实现文件读取操作,如果上传数据还要实现文件写入。

为了实现 web 网站读文件和写文件的需求,这就是学习文件操作文件读写的原因。

 

二、写文件具体方法

在 node.js 官网中有一个 API,点击官网中的 DOCS 可查询API,其中包含了 v6.11.3API 和 v8.5.0API v6.11.3中是稳定的API v8.5.0中是新增的API,查看v6.11.3API

image.png

v6.11.3API中左侧的是 node.js 内置的模块,都可以直接调用,

image.png

例如直接使用 process.stdout 就可以写入内容。但是有部分不同,文件操作使用的是 FileSystem 模块,直接调用FileSystem 模块就可以实现文件操作的一些内容。

FileSystem中呈现了实现文件操作的所有 API 如果使用文件操作的 API 需要首先 require 加载 js 模块,才能执行。

Node.js内部提供了很多模块,一些模块不需要加载就可以使用,而一些模块必须要加载才能使用。

原因是,如果模块是全局模块就可以直接使用,不需要通过 require 加载,如果模块不是全局模块在使用时,必须通过 require 加载。例如 process 块在使用时无需通过 require()函数来加载该块,可以直接使用。Fs 模块,在使用时必须通过 require()数来加载该块,方可使用。

通过 var fs=require(‘fs’) 这种方式进行加载,原因是 process 模块是全局的模块,而 Fs 模块不是全局模块。全局模块可以直接使用,而非全局模块需要先通过 require(‘ ’)加载模块。

判断哪些模块需要加载的方法

第一, 直接打开文档,在文档中查看是否需要require()函数加载。

第二, 在 globals 模块中列出了全局模块。

比如console模块就可以直接使用。

Console 模块并不是ECMA script 中自带的,它是浏览器帮助实现的一个对象,所以可以直接使用,在 node.js 中也可以帮助实现 console 这个模块直接使用。

在 globals 模块中例如setlmmediate setlneterval setTimeout都可以直接使用,因为它们都是全局变量。setlneterval setTimeout不是 ECMA script 中自带的,它们都是浏览器帮助实现的,所以才可以直接使用。在 node.js 中也可以帮助直接使用。它们都不是 htmlscript 原生的,都是浏览器或者 node.js 额外扩展的,在 chromev8 中是没有的。

在 globals 中的模块全局模块,除了这些模块其余模块在使用时都需要加载。


三、API稳定性

在查看 node,js 官网时,有用绿色标注的部分,例如stability:2-stable,稳定性是2。在 node.js 的 API 中稳定性分3级。

l 第一级是0级,表示API 已经过时了,不建议使用。

l 第二级是1级,表示 API 正在开发当中或者正在测试当中还未完全稳定,后面可能会有变动。

l 第三级是2级,表示 API 是稳定的,可以在工程中直接使用,在项目中直接使用。

稳定性是0的,用红色标注,稳定性是1的,用橙色标注,稳定性是2的,用绿色标注。node.js 中文网站可以帮助更好的学习。

文件操作 API 都是稳定的 API ,所以可以直接使用,使用时通过 require 加载,const fs=require(‘fs’), ES6 的语法和 vr 是一样的。首先加载模块,然后调进模块一些方法。

 

四、代码演示

编写代码:执行文件的写入操作和读取操作

新建一个02-js文件,实现文件写入操作

// 1.加载文件操作模块,fs 模块

Vr fs=require(‘fs’)

// 2实现文件写入操作,写入数据,把以下字符串写入文件中。

Vr msg =’Hollo world,你好世界!

// 调用 fs.writeFile() 进行文件写入,对于它的使用方法和相关参数可以通过文档查阅,在 File System 找到 fs.writeFile()

注意,在 fs 对象或模块中所有的 API 都提供一个同步方法和异步方法,异步方法由后台进行读写,同步方法要等待它读写完毕。这里是异步的方法。fs.writeFile(file,data[,option],callback),有四个参数 [,option]参数可以不传。在 API 中用”[]”的参数可写可不写。

 

参数的含义:

l 第一个参数 file<string>|<Buffer>|<integer>无论是字符串, Buffer 还是整数,第一个参数最终表达的是指向文件,要写入那个文件中。这里可以传入一个字符串,即文件的路径。

l 第二个参数 data<string>|<Buffer>只有两种数据类型,这个参数是向文件中写入的数据。数据类型只能是字符串或者Buffer Buffer 是一堆的字节数组,音乐,视频,字符串,各种文件等最终存储在计算机上都是二进制字节。 Buffer 表示一个字节数组,里面包含了一堆数据。第二个参数可以传一个字符串数据或者二进制数据,都可以被写入文件中。

l 第三个参数是可选项,可写可不写。options <oblect>|<string>

n ecoding <string>|<Null> default =’utf8’表示文件编码是 utf8 或者其他编码,如果不写,默认为 utf8 编码

n mode <integer> default= 0o666

n flag <string> default =’w’

l 第四个参数是一个回调函数,callback <Function> node,js 是事件驱动,当写文件操作完毕后会触发写文件操作完毕事件,当写操作完毕后,会进行回调函数。即当 callback 被调用时,表示写操作已经结束。

//fs.writeFile();是异步操作。

fs.writeFile(‘.hello.text’,msg,’utf8’,function(err){;

//表示在当前目录下创建一个文件,把 msg 数据写入,文件编码是 utf8 ,如果不写,默认编码为 utf8 .第四个函数是回调函数,在回调函数中有参数,默认是一个参数,为错误对象 err。

错误对象的含义是如果写文件成功,没有错误,则 err=null,如果写文件失败,则 err中不是 null

If(err){

Console.log(‘写文件出错啦!具体错误:+err’);

}else{

Console.log(‘ok’);

 

//表示如果 err 中有内容,输出写文件出错啦!具体错误:+err‘’,如果写文件没有出错,输出“ok”

以上就是node.js写文件的操作。

首先文件操作必须加载模块,然后调用 fs.writeFile 进行写入,写入完毕后打印 ok 

执行代码,先切换到当前目录,

结果:

image.png

image.png

这样就表示写入成功。

相关文章
|
存储 XML 传感器
NB-IoT 之 CoAP 协议格式介绍 | 学习笔记
快速学习 NB-IoT 之 CoAP 协议格式介绍
NB-IoT 之 CoAP 协议格式介绍 | 学习笔记
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
1234 30
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
canal
MySQL8.0创建新用户并授权
MySQL8.0创建新用户并授权
187 1
MySQL8.0创建新用户并授权
|
存储 监控 数据可视化
【日志系统】Loki日志监控 - 入门初体验
由于需求对日志进行监控,但是日志又很大,不能直接通过流的方式直接将text读取出来,可以使用grafana+loki+promtail搭建一个轻量级的日志系统,部署也简单方便。grafana提供可视化展示日志,然而loki是存储日志和处理查询,Promtail相当于loki的代理,收集日志发给loki。
1321 0
【日志系统】Loki日志监控 - 入门初体验
|
前端开发 JavaScript 算法
ThreeJS开篇
ThreeJS开篇
266 0
|
JavaScript 前端开发 编译器
极速 JavaScript 打包器:esbuild
esbuild是一个快速、可扩展的JavaScript打包器和压缩器,它的目标是成为最快的打包器。它使用Go编写,可以在几乎瞬间内完成大多数项目的构建。在本文中,我们将深入了解esbuild,并探讨其如何实现如此出色的性能。
302 0
|
网络协议 应用服务中间件 Shell
HTTPS之acme.sh申请证书
1.关于let's encrypt和acme.sh的简介 1.1 let's encrypt Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。
10664 2
|
关系型数据库 MySQL 索引
[Lnmpa] Mysql 内存分配&参数配置&优化方案详解
背景介绍Lnmpa、Lamp、Lnmp等环境的教程很多,但是在默认安装后,很容易出现内存占用光,出现OOM等问题,为了更好的让服务器稳定运行,需要对每个应用服务进行内存配置方面的优化。
6839 0
|
编译器 Shell Linux
VS2019 高级保存设置UTF-8编码-源代码乱码问题
VS2019 高级保存设置UTF-8编码-源代码乱码问题
1739 0
VS2019 高级保存设置UTF-8编码-源代码乱码问题
|
存储 监控 安全
【Elastic Stack-初识篇】 ELK介绍、搭建最新 ELK 日志分析系统
【Elastic Stack-初识篇】 ELK介绍、搭建最新 ELK 日志分析系统
1343 0