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 内置的模块,都可以直接调用,

例如直接使用 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

这样就表示写入成功。

相关文章
|
5月前
|
存储 C++ iOS开发
采用read()和write()读写二进制文件
C++ 中文本与二进制文件读写的区别在于数据存储格式和效率。文本文件以可读字符存储,浪费空间且不利于高效查找。二进制文件紧凑且高效,适合存储结构化数据如CStudent对象。`&gt;&gt;`和`&lt;&lt;`运算符适用于文本文件,而二进制文件需用`read()`和`write()`方法。`write()`从文件写指针位置写入数据,`read()`从文件读指针位置读取,两者都会移动指针。示例代码展示了如何使用这些方法处理学生信息。
61 12
|
7月前
|
存储 弹性计算 运维
读取文件
【4月更文挑战第29天】
72 2
|
7月前
|
Linux Windows
写入文件
写入文件。
42 2
|
7月前
|
C语言 C++
C/C++文件读取操作
C/C++文件读取操作
|
7月前
|
Linux
内核态的文件操作函数:filp_open、filp_close、vfs_read、vfs_write、set_fs、get_fs
内核态的文件操作函数:filp_open、filp_close、vfs_read、vfs_write、set_fs、get_fs
710 0
|
XML C# 数据格式
C#读取写入文件的三种方式
最近对文件的操作比较频繁。这里记录一下常用的几种文件读写的方式。 我这里使用窗体来做测试,例子在文末,可下载。
93 0
|
存储 C++ iOS开发
C++ 采用read()和write()读写二进制文件
以文本形式读写文件和以二进制形式读写文件的区别,并掌握了用重载的 >> 和 << 运算符实现以文本形式读写文件。在此基础上,本节继续讲解如何以二进制形式读写文件。 举个例子,现在要做一个学籍管理程序,其中一个重要的工作就是记录学生的学号、姓名、年龄等信息。这意味着,我们需要用一个类来表示学生,如下所示: class CStudent { char szName[20]; //假设学生姓名不超过19个字符,以 '\0' 结尾 char szId[l0]; //假设学号为9位,以 '\0' 结尾 int age; //年龄
128 0
|
存储 JavaScript 安全
14-fs-写入文件操作|学习笔记
快速学习14-fs-写入文件操作
14-fs-写入文件操作|学习笔记
|
网络协议 测试技术 Go
带缓冲的 Reader 读文件 | 学习笔记
快速学习带缓冲的 Reader 读文件
带缓冲的 Reader 读文件 | 学习笔记
|
移动开发 C++ Windows
C++读取文件
C++读取文件