开发者学堂课程【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。
在v6.11.3API 中左侧的是 node.js 内置的模块,都可以直接调用,
例如直接使用 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 <
o
blect>|<
s
trin
g
>
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
I
f
(err){
Console.log(‘
写文件出错啦!具体错误:
+err’);
}else{
Console.log(‘ok’);
//表示如果 err 中有内容,输出”写文件出错啦!具体错误:+err‘’,如果写文件没有出错,输出“ok”
以上就是node.js写文件的操作。
首先文件操作必须加载模块,然后调用 fs.writeFile 进行写入,写入完毕后打印 ok
执行代码,先切换到当前目录,
结果:
这样就表示写入成功。