1. 1. 使用 fs模块 对文件/目录进行操作
  2. 2. 使用 path模块 对路径进行操作

使用 fs模块 对文件/目录进行操作

  • 读取文件内容

      // fs.readFile(filename, [options], callback)
    // options 中的 flag 默认为 r,表示读取文件
    fs.readFile('test.txt', function (err, data) {
    if(err) throw err;
    console.log('文件内容是:', data);
    })
    // fs.readFileSync(filename, [options])
// 同步方式读取
try {
var data = fs.readFileSync('test.txt');
console.log('文件内容是:', data);
} catch (err) {
throw err;
}
options 中的 flag 取值:r/r+/rs/w/wx/w+/wx+/a/ax/a+/ax+

options 中的 encoding 取值:utf8/ascii/base64
  • 写入文件内容

      // fs.writeFile(filename, data, [options], callback)
    // options 中的 flag 默认为 w,表示写入文件,mode 默认为 0666(可读写的读写权限)
    fs.writeFile('test.txt', '我是被写入的内容', function (err) {
    if (err) throw err;
    console.log('成功写入.')
    }) // 同步方式写入
    fs.writeFile(filename, data, [options]) // 将 data 添加到文件底部, flag 默认为 a
    fs.appendFile(filename, data, [options], callback)
    // 同步方式添加
    fs.appendFileSync(filename, data, [options])

    options 中的 flag 和 encoding 与上同。

    options 中的 mode 为表示读写权限的数字,默认为 0666 可读写

    写入的 data 可以是一个 Buffer

  • 在指定位置读写文件

      fs.open(filename, flags, [mode], function (err, fd){
    // 读
    fs.read(fd, buffer, offset, length, position, function(err, bytesRead, buffer){})
    // 写
    fs.write(fd, buffer, offset, length, position, function(err, written, buffer){})
    // 关闭
    fs.close(fd)
    })
  • 创建目录

      // fs.mkdir(path, [mode], callback)
    // mode 默认为 0777,表示可读可写
    fs.mkdir('./testDir', function (err) {
    if (err) {
    throw err;
    }
    console.log('目录创建成功')
    })
  • 读取目录

      fs.readdir('./testDir', function (err, files) {
    if (err) {
    console.log('读取目录失败')
    }
    console.log(files);
    })
  • 查看文件/目录信息

      // fs.fstat('testDir', function (err, stats) {
    fs.stat('testFile.txt', function (err, stats) {
    if (err) {
    console.log('读取文件信息失败')
    }
    // stats 是一个 Fs.Stats 对象
    console.log(stats); console.log('是否为文件:', stats.isFile);
    console.log('是否为目录:', stats.isDictionary);
    console.log('读写权限是:', stats.mode);
    console.log('文件大小是:', stats.size);
    console.log('访问时间是:', stats.atime);
    console.log('修改时间是:', stats.mtime);
    console.log('创建时间是:', stats.ctime);
    })
  • 检查文件/目录是否存在

      fs.exists('./testFile.txt', function (exists) {
    console.log('testFile.txt是否存在:', exists);
    })
  • 获取文件的绝对路径

      fs.realpath('./testFile.txt', function (err, resolvedPath) {
    if (err) {
    throw err;
    }
    console.log('文件的绝对路径是:', resolvedPath);
    })
  • 修改文件时间

      // fs.utimes(path, atime, mtime, callback)
    fs.utimes('./testFile.txt', new Date(), new Date(), function (err) {
    if (err) {
    console.log('修改失败')
    }
    console.log('修改成功');
    })
  • 修改文件/目录的读取权限

      // fs.chmod(path, mode, callback)
    // 0600 表示所有者可读写,其他人不可
    fs.chmod('./testFile.txt', 0600, function (err) {
    if (err) {
    console.log('修改失败');
    }
    console.log('修改成功');
    })
  • 移动/重命名文件

      // fs.rename(oldPath, newPath, callback);        // oldPath 与 newPath 所在目录相同但文件名不同时,重命名
    // oldPath 与 newPath 所在目录不相同时,移动;若文件名不同,则移动后重命名
    fs.rename('./testFile.txt', './test/testNewFile.txt', function (err) {
    if (err) {
    console.log('文件移动失败');
    }
    console.log('文件移动成功');
    })
  • 创建和删除硬连接

    新创建的硬连接与旧的硬连接会指向相同文件

    删除的硬连接若是最后一个,则删除这个文件

      // 创建
    // fs.link(srcPath, dstPath, callback);
    fs.line('./testFile.txt', './test/testNewFile.txt', function (err) {
    if (err) {
    console.log('创建硬连接失败');
    }
    console.log('创建硬连接成功');
    })
    // 删除
    fs.unlink(path, callback);
  • 截断文件

    清除文件内容,后修改文件尺寸的操作

      fs.truncate(filename, len, callback)
  • 删除空目录

      fs.rmdir(path, callback);
  • 监视文件/目录

      // fs.watchFile(filename, [options], listener)
    // options 中的 interval 指多久检查一次,这里设定了 1小时
    fs.watchFile('./testFile.txt', {interval: 60*60*1000}, function (curr, prev) {
    if (Date.parse(prev.ctime) == 0) {
    console.log('文件被创建');
    } else if (Date.parse(curr.ctime) == 0) {
    console.log('文件被删除');
    } else if (Date.parse(prev.mtime) != Date.parse(curr.mtime)
    console.log('文件被修改');
    })
    })
    // 取消监视, 不指定listener则清空所有监视
    fs.unwatchFile(filename, [listener])
  • 使用 ReadStream对象 读取文件

      // 创建
    // fs.createReadStream(path, [options])
    // options 可填的key有:flags/encoding/autoClose/start/end
    var file = fs.createReadStream('./testFile.txt');
    var body = '';
    // 监听
    file.on('open', function (fd) {
    console.log('文件被打开,开始读取...');
    });
    file.on('data', function (data) {
    console.log('正在读取数据...');
    body += data;
    });
    file.on('end', function(){
    console.log('文件被读取完毕:');
    console.log(body);
    });
    file.on('close', function () {
    console.log('文件已关闭');
    })
    file.on('error', function (err) {
    console.log('文件读取出错');
    }) // 手动出发暂停/恢复读取文件
    // file.pause();
    // file.resume();
  • 使用 WriteStream对象 写入文件

      // 创建
    // var writable = fs.createWriteStream(path, [options])
    // options 可填的key有:flags/encoding/start // writable.write(chunk, [encoding], [callback]) // chunk 可为 Buffer/string // writable.end([chunk], [encoding], [callback])
    // 调用end方法结束写入 // 将 file1.txt 的内容写入 file2.txt
    var file1 = fs.createReadStream('./file1.txt');
    var file2 = fs.creatWriteStream('./file2.txt');
    file1.on('data', function (data) {
    file2.write(data);
    });
    file1.on('end', function () {
    file2.end(function() {
    console.log('文件写入完成');
    console.log('共写入的 %d 字节数据', file2.bytesWritten);
    });
    });
    // 使用 pipe方法 写入数据
// readStream.pipe(destination, [options])
var file1 = fs.createReadStream('./file1.txt');
var file2 = fs.createWriteStream('./file2.txt');
// options 中的 end 设置为 false 表示不会自动关闭文件
file1.pipe(file2, {end: false});
// 手动关闭
file1.on('end', function () {
// 这样可以继续写入数据再关闭
file2.end('我是被继续写入的数据');
}); // 取消写入
// readStream.unpipe([destination])

使用 path模块 对路径进行操作

    // 将非标准路径转化为标准路径
var unStdPath = './..//testFile.txt';
var stdPath = path.normalize(unStdPath); // 将多个字符串拼接
var newPath = path.join(__dirname, 'aaa', 'bbb', 'ccc'); // 解析出绝对路径
path.resolve(path1, [path2]) // 找出两个路径间的关系
path.relative(from, to) // 获取某路径中的目录名
path.dirname(path1) // 获取某路径中的文件名,去除 ext后缀
path.basename(path1, [ext]) // 获取某路径中的拓展名
path.extname(path1)

NODEJS-fs模块操作文件系统的更多相关文章

  1. NodeJs Fs模块

    和前面的Http.Url模块一样,Fs模块也是node的核心模块之一,主要用于对系统文件及目录进行读写操作. 基本方法 fs.stat fs.stat可以用来判断是文件还是目录:stats.isFil ...

  2. nodejs - fs模块 - 文件操作

    1, fs.stat  检测是文件还是目录 2, fs.mkdir 创建目录 var fs = require('fs') fs.mkdir('./dir',function(err){ if(err ...

  3. nodejs fs 模块

    件系统操作相关的函数挺多的.首先可以分为两大类. 一类是异步+回调的. 一类是同步的. 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称 ...

  4. nodejs fs 模块的用途

    /*** New node filefs 操作*/var fs = require(“fs”); /*创建文件 var fileName = “anps_hsj”;fs.mkdir(fileName, ...

  5. nodejs -- fs模块 ---> readFile 函数 1) fs.readFile(filename, "binary", function(error, file) 2) response.write(file, "binary");

    一:代码: 1.1 入口文件: index.js var server = require('./server'); var router = require("./router" ...

  6. nodejs零基础详细教程2:模块化、fs文件操作模块、http创建服务模块

    第二章  建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑 ...

  7. nodejs模块fs——文件操作api

    // fs模块常用api // 读取文件 .写入文件 .追加文件. 拷贝文件 .删除文件 // 读取文件 // fs.readFile(path[, options], callback) // fs ...

  8. 在nodeJS中操作文件系统(二)

    在nodeJS中操作文件系统(二)   1. 移动文件或目录 在fs模块中,可以使用rename方法移动文件或目录,使用方法如下:     fs.rename(oldPath,newPath,call ...

  9. Node.js 文件系统fs模块

    Node.js 文件系统封装在 fs 模块是中,它提供了文件的读取.写入.更名.删除.遍历目录.链接等POSIX 文件系统操作. 与其他模块不同的是,fs 模块中所有的操作都提供了异步的和 同步的两个 ...

随机推荐

  1. MVC缓存01,使用控制器缓存或数据层缓存

    对一些浏览频次多.数据量大的数据,使用缓存会比较好,而对一些浏览频次低,或内容因用户不同的,不太适合使用缓存.   在控制器层面,MVC为我们提供了OutputCacheAttribute特性:在数据 ...

  2. PHP获取远程图片并调整图像大小(转)

    <?php /** * *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整 ...

  3. Newtonsoft.Json(Json.Net)学习笔记-高级使用(转)

    1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称 7.动态决定属性是否序列化 8.枚举值的自定义格式化问题 9.自定义类型转换 10.全 ...

  4. ora-01658 :无法为表空间USERS 中的段创建INITIAL区

    "CREATE INDEX "IDX_TS_BONUS_Q_201209_DS" ON "TS_BONUS_Q_201209" ("DS&q ...

  5. 学习ASP.NET缓存机制

    缓存是大型BS架构网站的性能优化通用手段,之前知道有这个概念,并且也知道很重要,但是一直没静下心来了解.这次借着学习PetShop源码的机会熟悉一下ASP.NET基本的缓存机制(生产环境中的真实缓存有 ...

  6. 11g Physical Standby配置

    一,准备   Database DB_UNIQUE_NAME Oracle Net Service Name Primary PROD PROD Physical standby PRODDG PRO ...

  7. memcpy与memmove的区别

    在面试中经常会被问道memcpy与memove有什么区别? 整理如下: 其实主要在考C的关键字:restrict C库中有两个函数可以从一个位置把字节复制到另一个位置.在C99标准下,它们的原型如下: ...

  8. fatal error C1083: 无法打开包括文件:“stddef.h”: No such file or directory

      在VS2012安装吗目录下的这个文件夹 D:\Program Files\Visual Studio 2012\VC\include 找到了stddef.h文件,将其加到项目的包含目录中,OK. ...

  9. 用PowerShell脚本删除SharePoint 的 Page中的WebPart

    编写PowerShell脚本可以删除page中所有的webpart,也可以根据webpart的属性信息去删除特定的webpart. 下面的PowerShell脚本便是删除对应page中所有的webpa ...

  10. 智能车学习(十一)——陀螺仪学习

    一.学习说明 感觉就是配置I2C通信,然后直接移植51代码... 二.代码分享: 1.头文件: #ifndef I2C_GYRO_H_ #define I2C_GYRO_H_ /*********** ...