美文网首页
6. 在Node.js中操作文件系统

6. 在Node.js中操作文件系统

作者: gem_Y | 来源:发表于2020-07-26 21:42 被阅读0次

6.1 同步方法(xxxSync)与异步方法

image.png image.png

6.2 对文件执行读写操作

6.2.1 文件的完整读写

完整读取文件,如上例子。
fs.readFile(filename, [options], callback)

options为一个对象,
(1)该对象的flag属性可指定对文件采取什么操作,默认为'r'
'r': 读取文件,如果文件不存中则抛出异常
'r+': 读取并写入文件,如果文件不存中则抛出异常
....

(2)encoding属性用于指定使用何种编码格式来读取文件,若不指定encoding属性时,该参数值为一个存放了文件中原始二进制内容的缓存对象。


image.png
要完整写入文件,可以使用fs模块中的writeFile / writeFileSync 方法
fs.writeFile(filename,data,[options],callback)

options对象:

  • flag属性: 用于指定对该文件采取何种操作,默认 为'w'(文件不存在时创建该文件,文件已存在时重写该文件)
  • mode属性: 用于指定当文件被打开时对该文件的读写权限
  • encoding属性
var fs = require('fs');
fs.writeFile('./chapter-6/message.txt','这是第一行。\r\n这是第二行。', function(err){
  if (err) {
    console.log('写入文件操作失败')
  } else {
    console.log('写入文件操作成功')
  }
})
var fs = require('fs');
var data = new Buffer('我喜爱编程')
fs.writeFile('./chapter-6/message.txt',data, function(err){
  if (err) {
    console.log('写入文件操作失败')
  } else {
    console.log('写入文件操作成功')
  }
})
// 追加数据
var fs = require('fs');
var options = {
  flag: 'a'
}
fs.writeFile('./chapter-6/message.txt','这是追加的数据',options, function(err){
  if (err) {
    console.log('写入文件操作失败')
  } else {
    console.log('写入文件操作成功')
  }
})

实现图片的复制:
读取写入文件时使用base64编码


image.png

writeFileSync:

fs.writeFileSync(filename,data,[options])
appendFile/appendFileSync

用于将数据追加到文件底部(跟writeFile一样的结果呀?!)

fs.appendFile(filename,data,[options],callback)
fs.appendFileSync(filename,data,[options])
image.png

6.2.2 从指定位置处开始读写文件

  1. 使用open方法打开应用程序根目录下的message.txt文件,并在回调函数中将fd参数值输出到控制台窗口中


    image.png
  2. 打开文件之后,可以在回调函数中使用fs模块中的read方法或readSync方法从文件的指定位置处读取文件,也可以使用fs模块中的write方法或writeSync方法从文件的指定处开始写入数据

  • 读取数据:
fs.read(fd,buffer,offset,length,position,callback)
// buffer: 用于指定将文件数据读取到哪个缓存区中
//  offset: 缓存区中写入数据时的开始写入位置(以字节为单位)
//  length: 用于指定从文件中读取的字节数
// position: 指定读取文件时的开始位置(以字节为单位),如果该参数为null,将从文件的当前被读取位置处(前一次读取时的开始位置+读取字节数)开始读取文件
var bytesRead = fs.readSync(fd,buffer,offset,length,position)
image.png
image.png
  • 写入数据:
fs.write(fd,buffer,offset,length,position,callback)
// offset: 指定从缓存区中读取数据时的开始读取位置(以字节为单位)
// length: 指定从缓存区中读取的字节数
// position: 指定写入文件时的开始位置(以字节为单位)
fs.writeSync(fd,buffer,offset,length,position)
image.png
  1. 在fs模块中,提供close方法与closeSync方法以关闭文件
fs.close(fd,[callback])

为了防止数据丢失,在调用close方法之前先调用fsync方法以将内存缓冲区中的数据全部书写到文件中

fs.sync(fd, [callback])

6.3 创建与读取目录

  • 创建目录
fs.mkdir(path, [mode], callback)
// mode : 指定该目录的权限,默认值为0777(表示任何人可读写该目录)
fs.mkdirSync(path, [mode])
image.png
  • 读取目录
fs.readdir(path, callback)
var files = fs.readdirSync(path)
image.png

6.4 查看与修改文件或目录的信息

6.4.1 查看文件或目录的信息

fs.stat(path, callback)
fs.lstat(path, callback) // 当查看符号链接文件的信息时,必须使用这个方法
var fs = require('fs')
fs.stat('./chapter-6/message.txt', function(err, stats){
  console.log(stats)
})

stats 是fs.Stats对象,该对象拥有如下的属性和方法

  • isFile方法

  • isDirectory方法

  • isBlockDevice方法

  • isSocket方法

  • dev 属性
    -size 属性
    ....


    image.png
  • 使用同步方式查看文件时:

var stats = fs.statSync(path)
var stats = fs.lstatSync(path)
  • 在使用open/openSync方法打开文件并返回文件描述符后,可以使用fs模块中的fstat方法查询被打开的文件信息
fs.fstat(fd, callback)
var stats = fs.fstatSync(fd)

6.4.2 检查文件或目录是否存在

fs.exists(path, callback)
var exists = fs.existsSync(path)
var fs = require('fs')
fs.exists('./msssss.txt', function(exists) {
  if (exists) {
    console.log('该文件存在')
  } else {
    console.log('该文件不存在')
  }
})

6.4.3 获取文件或目录的绝对路径

fs.realpath(path, [cache], callback)
  • cache为可选参数,cache为一个对象,其中存放了一些预先指定的路径。
var fs = require('fs')
var cache = {'/etc': '/private/etc'}  // path 中的 /etc 指的就是 /private/etc
fs.realpath('/etc/passwd', cache, function(err, resolvedPath) {
  if (err) {
    console.log('获取目录的绝对路径失败', err)
  } else {
    console.log('resolvedPath', resolvedPath)
  }
})
var fs = require('fs')
fs.realpath('./chapter-6/message.txt', function(err, resolvedPath) {
  if (err) {
    console.log('获取目录的绝对路径失败', err)
  } else {
    console.log('resolvedPath', resolvedPath)
  }
})
PS E:\study\NodeJS-Learning> node chapter-6.js
resolvedPath E:\study\NodeJS-Learning\chapter-6\message.txt

同步:

var resolvedPath = fs.realpathSync(path, [cache])

6.4.3 修改文件访问时间及修改时间

fs.utimes(path, atime, mtime, callback)

6.4.4 修改文件或目录的读写权限

fs.chmod(path, mode, callback)

6.5 对文件或目录执行的其他操作

6.5.1 移动文件或目录

fs.rename(oldPath, newPath, callback)
  • 当移动后的路径与原路径为同一路径,而移动后的文件名(目录名)与原文件名(目录名)不同时,则执行文件或目录的重命名操作
var fs = require('fs')
var files = fs.rename('./chapter-6/message.txt', './test/text.txt', function(err) {
  // test 子目录必须已经存在,否则将导致移动操作失败
  if (err) {
    console.log('移动文件操作失败', err)
  } else {
    console.log('移动文件操作成功')
  }
})
fs.renameSync(oldPath, newPath)

6.5.2 创建与删除文件的硬链接

  • 创建硬链接(改变一个文件,在另外一个路径的文件也会被改变)
fs.link(srcpath, dstpath, callback)
fs.linkSync(srcpath, dstpath)
var fs = require('fs')
fs.link('./chapter-6/hardlink-text.txt', './test/hardlink-dst.txt', function(err) {
  if (err) {
    console.log('创建硬链接失败')
  } else {
    console.log('创建硬链接操作成功')
  }
})

删除硬链接(在创建多个硬链接后,再删除其中任何一个硬链接,其他硬链接依然存在,但若删除的硬链接为该文件的最后一个硬链接,则事实上就是彻底删除该文件了)

fs.unlink(path, callback)
fs.unlinkSync(path)
var fs = require('fs')
fs.unlink('./chapter-6/hardlink-text.txt', function(err) {
  if (err) {
    console.log('删除硬链接失败')
  } else {
    console.log('删除硬链接操作成功')
  }
})

6.5.3 创建与查看符号链接

  • 符号链接: (类似与桌面快捷键)
fs.symlink(srcpath, dstpath, [type], callback)
fs.symlinkSync(srcpath, dstpath, [type])
  • type : 指定为 文件创建符号链接(file) 还是 目录创建符号链接(dir)
var fs = require('fs')
fs.symlink('./chapter-6', './symlink', 'dir', function(err) {
  if (err) {
    console.log('为目录创建符号链接操作失败', err)
  } else {
    console.log('为目录创建符号链接操作成功')
  }
})
var fs = require('fs')
fs.symlink(__dirname + '/chapter-6/symlink-src.txt', __dirname + '/symlink-dst.txt', 'file', function(err) {
  if (err) {
    console.log('为文件创建符号链接操作失败', err)
  } else {
    console.log('为文件创建符号链接操作成功')
  }
})

当直接在终端运行时候,会报错,创建符号链接失败

[Error: EPERM: operation not permitted, symlink '.\chapter-6' -> 'E:\study\NodeJS-Learning\symlink'] 

解决办法,以管理员的身份运行git,然后就成功了

  • 查看符号中所包含的另外一个文件(目录)的路径 以及 文件名(目录名)
fs.readlink(path, function(err, linkString) {
} )
var linkString = fs.readlinkSync(path)
var fs = require('fs')
fs.symlink(__dirname + '/chapter-6/symlink-src', __dirname + '/symlink-dst.txt', function(err, linkString){
  if (err) {
    console.log('为文件创建符号链接操作失败', err)
  } else {
    fs.readlink(__dirname + '/symlink-dst.txt', function(err, linkString) {
      if (err) {
        console.log('读取符号链接操作失败', err)
      } else {
        console.log('linkString:  ' + linkString)
      }
    })

  }
})
E:\study\NodeJS-Learning>node chapter-6.js
linkString:  E:\study\NodeJS-Learning\chapter-6\symlink-src

相关文章

  • 6. 在Node.js中操作文件系统

    6.1 同步方法(xxxSync)与异步方法 6.2 对文件执行读写操作 6.2.1 文件的完整读写 完整读取文件...

  • Node.js与文件系统操作(四)

    Node.js中的fs模块与文件系统操作相关,主要用于实现文件系统的操作。fs模块中提供了大量与文件系统相关的操作...

  • Node.js与文件系统操作(一)

    Node.js中的fs模块与文件系统操作相关,主要用于实现文件系统的操作。fs模块中提供了大量与文件系统相关的操作...

  • Node.js与文件系统操作(三)

    Node.js中的fs模块与文件系统操作相关,主要用于实现文件系统的操作。fs模块中提供了大量与文件系统相关的操作...

  • Node.js与文件系统操作(二)

    Node.js中的fs模块与文件系统操作相关,主要用于实现文件系统的操作。fs模块中提供了大量与文件系统相关的操作...

  • Node.js基础-读写文件

    Node.js操作文件 读取文件 fs是file-system的简写,就是文件系统的意思在node中如果要进行文件...

  • Nodejs开发实战 : 第四节 Node模块-FileSyst

    Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node.js 文件系统封装在 fs ...

  • Node.js的文件系统

    Node.js的文件系统 JavaScript的是没有操作文件的能力,但是Node.js是可以做到的。Node.j...

  • Node.js 文件系统

    Node.js 中我们可以使用 fs(File System) 模块来操作文件,文件系统模块有两种不同的方法,分别...

  • 06、node.js 文件系统

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

网友评论

      本文标题:6. 在Node.js中操作文件系统

      本文链接:https://www.haomeiwen.com/subject/pzyglktx.html