Node.js 学习笔记 五

Node.js文件系统

Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示:

var fs = require("fs")

异步和同步

  • 文件系统分为异步的(fs.readFile() )和同步的( fs.readFileSync())
  • 异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
  • 异步方法性能更高,速度更快,而且没有阻塞。

实例:

创建input.txt文件,内容如下:

我永远喜欢阿狸:i love ahri forever
文件读取实例

创建file.js,内容如下:

const fs = require('fs');
// 异步读取
fs.readFile('./input.txt',(err,data) => {
	if(err) {
		return console.error(err);
	}
	console.log('异步读取:'+data.toString())
})
// 同步读取

const data = fs.readFileSync('./input.txt');
console.log('同步读取:'+data.toString());
console.log('程序执行完毕');

输出结果:

> node file.js
同步读取:我永远喜欢阿狸:i love ahri forever
文件读取实例
程序执行完毕
异步读取:我永远喜欢阿狸:i love ahri forever
文件读取实例

打开文件

语法
以下为在异步模式下打开文件的语法格式:

fs.open(path, flags[, mode], callback)

参数:

  • path - 文件的路径。
  • flags - 文件打开的行为。具体值详见下文。
  • mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
  • callback - 回调函数,带有两个参数如:callback(err, fd)。

flags的参数可以是以下值:

[外链图片转存失败(img-xFnYDo6u-1563882478263)(reademe0717_files/1.jpg)]

实例:

const fs = require('fs');
console.log('开始打开文件');
fs.open('./input.txt','r+',function(err,fd) {
	if(err) {
		return console.error(err);
	}
	console.log('文件打开成功!');
})

输出结果:

> node file.js
开始打开文件
文件打开成功!

获取文件信息

语法
以下为通过异步模式获取文件信息的语法格式:

fs.stat(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性。例如判断是否为文件:

const fs = require('fs');
fs.stat('./input.txt',function(err,stats) {
	console.log(stats.isFile());		// true
})

[外链图片转存失败(img-m0SeP5nH-1563882478267)(reademe0717_files/2.jpg)]
实例:

const fs = require('fs');
console.log('开始读取文件信息');
fs.stat('./input.txt',function(err,stats) {
	if(err) {
		return console.log(err);
	}
	console.log(stats);
	console.log('获取文件信息成功');
	// 检测文件类型
	console.log('是否为文件(ifFile)?'+stats.isFile());
	console.log('是否是目录(isDirectory)?'+stats.isDirectory());
})

输出结果如下:

> node file.js
开始读取文件信息
Stats {
  dev: 3506382322,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: undefined,
  ino: 12103423998595128,
  size: 63,
  blocks: undefined,
  atimeMs: 1563452419368.5586,
  mtimeMs: 1563372554341.1382,
  ctimeMs: 1563372554341.1382,
  birthtimeMs: 1563372529892.5398,
  atime: 2019-07-18T12:20:19.369Z,
  mtime: 2019-07-17T14:09:14.341Z,
  ctime: 2019-07-17T14:09:14.341Z,
  birthtime: 2019-07-17T14:08:49.893Z }
获取文件信息成功
是否为文件(ifFile)?true
是否是目录(isDirectory)?false

写入文件

语法

以下为异步模式下写入文件的语法格式:

fs.writeFile(file, data[, options], callback)

writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。

参数

参数使用说明如下:

  • file - 文件名或文件描述符。
  • data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
  • options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
  • callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

实例

const fs = require('fs');
console.log('准备写入文件');
fs.writeFile('./input.txt','我永远喜欢阿狸',function(err) {
	if(err) {
		return console.error(err);
	}
	console.log('写入成功');
	console.log('----------------');
	console.log('读取写入的数据');
	fs.readFile('./input.txt',function(err,data) {
		if(err) {
			return console.error(err);
		}
		console.log('读取到的文件内容为:'+data.toString());
	})
})

输出结果为:

> node file.js
准备写入文件
写入成功
----------------
读取写入的数据
读取到的文件内容为:我永远喜欢阿狸

读取文件

语法

以下为异步模式下读取文件的语法格式:

fs.read(fd, buffer, offset, length, position, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

  • fd - 通过 fs.open() 方法返回的文件描述符。
  • buffer - 数据写入的缓冲区。
  • offset - 缓冲区写入的写入偏移量。
  • length - 要从文件中读取的字节数。
  • position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
  • callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。

实例

创建input.txt,内容为:

我永远喜欢阿狸

创建file.js文件,内容为:

const fs = require('fs');
let buf = new Buffer.alloc(1024);

console.log('准备打开已存在的文件');
fs.open('./input.txt','r+',function(err,fd) {
	if(err) {
		return console.error(err);
	}
	console.log('文件打开成功,准备读取文件');
	fs.read(fd,buf,0,buf.length,0,function(err,bytes) {
		if(err) {
			console.log(err);
		}
		console.log(bytes+' 字节被读取');
		// 仅输出读取的字节
		if(bytes > 0) {
			console.log(buf.slice(0,bytes).toString());
		}
	})
})

输出结果为:

> node file.js
准备打开已存在的文件
文件打开成功,准备读取文件
21 字节被读取
我永远喜欢阿狸

关闭文件

语法

以下为异步模式下关闭文件的语法格式:

fs.close(fd, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

  • fd - 通过 fs.open() 方法返回的文件描述符。
  • callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

我永远喜欢阿狸

创建file.js,文件内容为:

const fs = require('fs');
let buf = new Buffer.alloc(1024);
fs.open('./input.txt','r+',function(err,fd) {
	if(err) {
		return console.error(err);
	}
	console.log('文件打开成功');
	console.log('准备读取文件');
	fs.read(fd,buf,0,buf.length,0,function(err,bytes) {
		if(err) {
			console.log(err);
		}
		console.log('文件读取成功');
		// 仅输出读取的文件
		if(bytes > 0) {
			console.log('读取的文件为:'+buf.slice(0,bytes).toString());
		}
		fs.close(fd,function(err) {
			if(err) {
				console.log(err);
			}
			console.log('文件关闭成功');
		})
	})
})

输出结果为:

> node file.js
文件打开成功
准备读取文件
文件读取成功
读取的文件为:我永远喜欢阿狸
文件关闭成功

截取文件

语法

以下为异步模式下截取文件的语法格式:

fs.ftruncate(fd, len, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

  • fd - 通过 fs.open() 方法返回的文件描述符。
  • len - 文件内容截取的长度。
  • callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

我永远喜欢阿狸

创建file.js文件,内容为:

const fs = require('fs');
let buf = new Buffer.alloc(1024);
console.log('开始打开文件');
fs.open('./input.txt','r+',function(err,fd) {
	if(err) {
		return console.error(err);
	}
	console.log('文件打开成功');
	console.log('开始截取文件,截取文件10字节以内的内容,超出部分会被剔除');
	// 截取文件
	fs.ftruncate(fd,10,function(err) {
		if(err) {
			console.log(err);
		}
		console.log('文件截取成功');
		console.log('开始读取文件');
		fs.read(fd,buf,0,buf.length,0,function(err,bytes) {
			if(err) {
				console.log(err);
			}
			console.log('文件读取成功');
			if(bytes > 1) {
				console.log('读取的文件内容为:'+buf.slice(0,bytes).toString());
			}
			console.log('关闭文件');
			fs.close(fd,function(err) {
				if(err) {
					console.log(err);
				}
				console.log('关闭文件成功');
			})
		})
	})
})

输出内容为:

> node file.js
开始打开文件
文件打开成功
开始截取文件,截取文件10字节以内的内容,超出部分会被剔除
文件截取成功
开始读取文件
文件读取成功
读取的文件内容为:我永远�
关闭文件
关闭文件成功

删除文件

语法

以下为删除文件的语法格式:

fs.unlink(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

我永远喜欢阿狸

创建file.js,文件内容为:

const fs = require('fs');
console.log('准备删除文件');
fs.unlink('./input.txt',function(err) {
	if(err) {
		console.log(err);
	}
	console.log('删除文件成功');
})

输出结果为:input.txt文件被删除掉

准备删除文件
删除文件成功

创建目录

语法

以下为创建目录的语法格式:

fs.mkdir(path[, options], callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • options 参数可以是:
    • recursive - 是否以递归的方式创建目录,默认为 false。
    • mode - 设置目录权限,默认为 0777。
  • callback - 回调函数,没有参数。

实例

const fs = require('fs');
// tmp目录必须存在
console.log('创建目录 /tmp/ahri/');

fs.mkdir(__dirname+'/tmp/ahri/',function(err) {
	if(err) {
		console.log(err);
	}
	console.log('目录创建成功');
})

输出结果:

> node file.js
创建目录 /tmp/ahri/
目录创建成功

读取目录

语法

以下为读取目录的语法格式:

fs.readdir(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。

实例

创建file.js文件,内容如下:

const fs = require('fs');
console.log('查看/tmp 目录');
fs.readdir(__dirname+'/tmp',function(err,files) {
	if(err) {
		return console.error(err);
	}
	files.forEach(file => console.log(file));
})

输出结果为:

> node file.js
查看/tmp 目录
ahri
kurumi

删除目录

语法

以下为删除目录的语法格式:

fs.rmdir(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,没有参数。

实例

创建file.js文件,内容如下:

const fs = require('fs');
console.log('准备删除目录 /tmp/ahri');
fs.rmdir(__dirname+'/tmp/ahri',function(err) {
	if(err) {
		return console.error(err);
	}
	console.log('目录删除成功');
	console.log('读取目录');
	fs.readdir(__dirname+'/tmp',function(err,files) {
		if(err) {
			return console.error(err);
		}
		console.log('读取目录成功');
		files.forEach(file => console.log(file));
	})
})

输出结果如下:

> node file.js
准备删除目录 /tmp/ahri
目录删除成功
读取目录
读取目录成功
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值