Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node.js 文件系统封装在 fs 模块是中,它提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX 文件系统操作。
异步(async)和同步(sync)
Nodejs中Api一般都是异步的接口,如果调用同步的只需要在后面加上xxxSync()。
Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
var fs = require("fs");//异步读取文件fs.readFile('input.txt', function (err, data) { if (err) { return console.error(err); } console.log("Asynchronous read: " + data.toString());});
// /同步读取文件var data = fs.readFileSync('input.txt');console.log("Synchronous read: " + data.toString());console.log("Program Ended");
Node文件系统:目录操作
1. 判断文件路径是否存在: fs.exists(path, callback)
参数说明:
path 欲检测的文件路径
callback 回调
fs.exists("test",function(exists){ console.log(exists);})
2. 创建目录 fs.mkdir/mkdirSync(path[, mode], callback)
path – 文件路径 ;
mode – 设置目录权限,默认为0777 callback – 回调函数
var fs = require("fs");fs.mkdir("test",function(error){ if (err) return console.error(err); console.log('目录创建成功');})
3. 查看目录 fs.readdir(path, callback(err, files))
path – 文件路径。
callback – 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表
fs.readdir("test",function(error,files){ console.log(files);})
返回结果: [ ‘note.txt’ ]
fs.readdir("test",function(error,files){ console.log(files);})
返回结果: [ ‘note.txt’ ]
4. 删除目录 fs.rmdir(path, callback)
参数使用说明如下:
path – 文件路径。
callback – 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表
fs.readdir("test",function(error,files){ console.log(files);})
返回结果: [ ‘note.txt’ ]
注意:只能删除空的目录,有文件的目录会报错:
[Error: ENOTEMPTY: directory not empty, rmdir ‘F:\FullStack-Cource-2017\Nodejs-Laravel-Action\03-Node模块-FileSystem\test’]
Node文件模块:文件操作说明
1. 写入文件 fs.writeFile(filename, data[, options], callback)
如果文件存在,写入的内容会覆盖旧文件内容
参数使用说明如下:
path - 文件路径。
data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象。
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 ,flag 为 'w' callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
var fs = require("fs");fs.writeFile("test/1.txt","hello file",function(error){ console.log(error);})
2. 文件读取 fs.readFile( url , code , callback);
异步读取文件
fs.readFile(“test/1.txt”,”utf-8″,function(error,data){ console.log(data); })
异步读取文件
var data =fs.readFileSync(“test/1.txt”,”utf-8″); console.log(data);
3. 向文件中追加写入 fs.appendFile(name,str,encode,callback);
参数说明:
name : 文件名
str : 添加的字段
encode : 设置编码
callback : 回调函数
栗子
fs.appendFile(“test/1.txt”,’窗前明月光,疑是地上霜’,’utf8′,function(eror){
})
4. 改变文件名 : fs.rename(old文件名,新文件名,callback(传递一个err参数))
fs.rename(“test/1.txt”,”test/a.txt”,function(error){
})
5. 查看文件状态 fs.stat(fileaddr,callback(error,stats))
在fs模块中,可以使用 fs.stat() 方法或 fs.lstat() 方法查看一个文件或目录的信息,如文件的大小、创建时间、权限等信息。这两个方法的唯一区别是当查看符号链接文件的信息时,必须使用 fs.lstat() 方法。
var fs = require(“fs”);
var path = require(“path”);
var fileaddr = path.resolve(__dirname,"file/note.txt");
/** * fileaddr: 需要查看状态的相对,或者绝对地址 * callback(error,stats): error:返回的错误信息 * stats:返回的成功信息 */fs.stat(fileaddr,function(error,stats){ if(error){ console.log(error) }else{ console.log(stats); console.log(stats.isFile()); console.log(stats.isDirectory()); console.log(stats.isCharacterDevice()); console.log(stats.isSymbolicLink()); console.log(stats.isFIFO()); console.log(stats.isSocket()); console.log(stats.isBlockDevice()); }})
fs.Stats对象的方法如下:
stats.isFile() : 判断被查看对象是否是一个文件。如果是标准文件,返回true。是目录、套接字、符号连接、或设备等返回false。
stats. isDirectory() : 判断被查看对象是否是一个目录。如果是目录,返回true。
stats. isBlockDevice() : 判断被查看对象是否是一个块设备文件。 如果是块设备,返回true,大多数情况下类UNIX系统的块设备都位于/dev目录下。
stats. isCharacterDevice() : 判断被查看对象是否是一个字符设备文件。如果是字符设备,返回true。
stats. isSymbolicLink() : 判断被查看对象是否是一个符号链接文件。如果是符号连接,返回true。该方法仅在fs.lstat()方法的回调函数中有效。
stats.isFIFO() : 判断被查看对象是否是一个FIFO文件。如果是FIFO,返回true。FIFO是UNIX中的一种特殊类型的命令管道。该方法仅在LINUX系统下有效。
stats.isSocket() : 判断被查看对象是否是一个socket文件。 如果是UNIX套接字,返回true。该方法仅在LINUX系统下有效。
fs.Stats对象的属性如下:
dev : 文件或目录所在的设备ID。该属性值在UNIX系统下有效;
mode : 文件或目录的权限标志,采用数值形式表示;
nlink : 文件或目录的的硬连接数量;
uid : 文件或目录的所有者的用户ID。该属性值在UNIX系统下有效;
gid : 文件或目录的所有者的用户组ID。该属性值在UNIX系统下有效;
rdev : 字符设备文件或块设备文件所在设备ID。该属性值在UNIX系统下有效;**
ino : 文件或目录的索引编号。该属性值仅在UNIX系统下有效;
size : 文件的字节数;
atime : 文件或目录的访问时间;
mtime : 文件或目录的最后修改时间;
ctime : 文件或目录状态的最后修改时间;
birthtime : 文件创建时间,文件创建时生成。在一些不提供文件
birthtime 的文件系统中,这个字段会使用 ctime 或 1970-01-01T00:00Z 来填充;
6. 删除文件 fs.unlink(path, callback)
参数说明