node学习笔记之fs模块
-
fs(file system) 文件系统模块
-
-
fs.readFile(path[, options], callback)
-
fs.readFileSync(path[, options])
-
fs.writeFile(path, data[, options], callback)
-
fs.writeFileSync(path, data[, options])
-
fs.rename(oldPath, newPath, callback)
-
fs.renameSync(oldPath, newPath)
-
fs.readdir(path[, options], callback)
-
fs.readdirSync(path[, options])
-
fs.mkdir(path[, options], callback)
-
fs.mkdirSync(path[, options])
-
-
应用
fs(file system) 文件系统模块
在我的理解里面,这个模块简直算是神奇爆了。
fs模块,一个可以操作文件的模块。
但是,fs模块有一个奇妙的小问题(待补充还有没有模块和fs类似),fs模块相对路径相对的地址为打开命令行的位置,而不是像require一样,以当前文件所在目录为起始路径。
本文后续会在较多地方提及buffer,在这里稍作说明:
Node.js 可以用来处理二进制流数据或者与之进行交互。
fs.readFile(path[, options], callback)
const fs = require('fs');
fs.readFile('./index.html', (err, data) => {
if (err) throw err
console.log(data)
})
最最最最简单直接的用法,读取文件,err是错误信息,直接抛出就好了,data是读取到文件的信息。
如果没有设置options(比如
{encoding: 'utf8'})
的情况下,会直接返回原始的 buffer。
(下图是打印出的data)
不过,options有一种骚操作,直接传入的是一个字符串类型;当传入的是字符串的时候,会直接将字符串设置成字符编码类型使用(比如
fs.readFile('./index.html','utf8',()=>{})
,这种情况下会直接把utf8作为字符编码)。
(下图是打印出的utf8编码的data,不要问为什么是乱码,因为txt的字符编码我莫得设置,其实说白了就是编码不统一)
(下图是打印出的还是utf8编码的data,这次是正常的了)
下面放着官网的介绍,最主要就是为了…怕你们看完了我写的小白介绍看不懂还得辛辛苦苦翻文档去,所以干脆给你们省个事儿,本人本着用得到才学习的学习方式(别打我),所以暂时就只写了最基本的用法(求求你们真的别打我)。
(没错这下面就是扒的官网介绍)
path
<string>
|
<buffer>
|
<URL>
|
<integer>
文件名或文件描述符。
options
<Object>
|
<string>
callback
<Function>
异步地读取文件的全部内容。
fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
回调会传入两个参数
(err, data)
,其中
data
是文件的内容。如果没有指定
encoding
,则返回原始的 buffer。如果
options
是字符串,则它指定字符编码:fs.readFile('/etc/passwd', 'utf8', callback);
当
path
是目录时,
fs.readFile()
与
fs.readFileSync()
的行为是特定于平台的。 在 macOS、Linux 和 Windows 上,将返回错误。 在 FreeBSD 上,将返回目录内容的表示。// 在 macOS、Linux 和 Windows 上: fs.readFile('<目录>', (err, data) => { // => [Error: EISDIR: illegal operation on a directory, read <目录>] }); // 在 FreeBSD 上: fs.readFile('<目录>', (err, data) => { // => null, <data> });
fs.readFile()
函数会缓冲整个文件。 为了最小化内存成本,尽可能通过
fs.createReadStream()
进行流式传输。
fs.readFileSync(path[, options])
这个是fs.readFile的同步版本说白了,fs.readFileSync的返回值就是读取后的data,当需要捕获错误的时候就直接使用
try catch
进行捕获就好了。
(图片…是没有的,因为数据和上面异步的是一样的,直接上去看吧)
fs.writeFile(path, data[, options], callback)
简单来说就是写入一个文件,第一个参数是文件名,当没有这个文件的时候会创建这样一个文件,但是当文件已经存在的时候就会直接覆盖原文件。
(结合一下上面的readFileSync读取之前的1.txt并写入一个test.txt出来)
const fs = require('fs');
let data = fs.readFileSync('./1.txt', 'utf8');
fs.writeFile('./test.txt', data, 'utf8', (err) => {
if (err) throw new Error(err);
console.log('写入test.txt成功')
})
(下图就是通过读取1.txt里面的内容,然后写入一个新的test.txt文件)
file
<string>
|
<buffer>
|
<URL>
|
<integer>
文件名或文件描述符。
data
<string>
|
<buffer>
|
<TypedArray>
|
<DataView>
options
<Object>
|
<<string>>