node.js实现文件的读写操作

在node.js中,有的模块使用时,无需通过require()函数来加载该模块,可以直接使用,例如:process 模块

有的模块使用时,必须经过require()函数来加载该模块,才能使用,例如,fs模块:var fs = require('fs');

原因:process模块是全局模块,而fs不是全局模块,全局模块可以直接使用,而非全局模块需要先通过require('')加载该模块

node官网教程中 Globals里面的模块都是可以直接使用的

console和setTimeout都不是ECMAScript有的,是浏览器扩展的

node.js中,稳定性0级表示已经已经废弃的,稳定性1级表示正开发测试的,稳定性2级表示稳定的 该特性已被证明是符合要求的,建议使用稳定性为2级的

1、实现文件的写入操作

// 实现文件写入操作
// 加载文件操作模块:fs模块
var fs = require('fs');

var msg = "Hello World!您好 世界!";

// 调用fs.writeFile()进行文件写入,这是一个异步操作
fs.writeFile('./hello.txt', msg, 'utf8', function (err) {
  // 在这个回调函数中只有一个参数,那就是err
  // 如果 err === null,表示文件写入成功,没有错误
  // 如果err不等于null,就表示文件写入失败了
  if (err) {
    console.log('文件写入错误,错误是:'+ err);
  } else {
    console.log('ok');
  }
});

node.js和浏览器下的JavaScript既是单线程的又是异步非阻塞的

// 实现文件写入操作
// 加载文件操作模块:fs模块
var fs = require('fs');

var msg = "Hello World!您好 世界!";

console.log('000');

// 调用fs.writeFile()进行文件写入,这是一个异步操作
fs.writeFile('./hello.txt', msg, 'utf8', function (err) {

  console.log('111');

  if (err) {
    console.log('文件写入错误,错误是:'+ err);
  } else {
    console.log('ok');
  }
});

// node.js和浏览器下的JavaScript既是单线程的又是异步非阻塞的

console.log('222');

js代码会单线程的执行下去,遇到fs.writeFile()这个异步操作的时候,加入等待,并继续向下执行

2、实现文件的读取操作

// 加载fs模块
fs = require('fs');
// 调用fs.readFile()进行文件读取,这是一个异步操作
fs.readFile('./hello.txt', function(err, data) {
  if(err) throw err;
  // data默认是一个Buffer对象,里面保存的就是一个一个的字节,(理解为字节数组)
  // 把Buffer对象转换为字符串,调用toString()方法
  console.log(data);
  console.log(data.toString('utf8'));
  // 调用Buffer对象的toString()方法的时候,不传 utf8 参数,默认也是 utf8
  console.log(data.toString());
});

3、实现文件的读取操作,直接在fs.readFile()的第二个参数设置编码方式

// 加载fs模块
fs = require('fs');
// 调用fs.readFile()进行文件读取,这是一个异步操作
// 在读取文件的时候,如果传递了编码,那么回调函数中的data默认就会转换为字符串
fs.readFile('./hello.txt','utf8', function(err, data) {
  if(err) throw err;
  console.log(data);
});

调用fs.readFile()进行文件读取,的第一个参数:'./相对路径' 相对的是执行node命令的路径,而不是相对于执行的这个js文件所在路径来查找。

因此,如果我们在fs.js所在目录下node命令执行这个文件可以正常执行,但在别的地方node命令执行这个文件就会报错。

这就是读取文件的时候的路径问题

4、读取文件中的路径问题

解决在文件读取中'./相对路径'的问题

解决办法:__dirname, __filename

__dirname: 表示当前正在执行的js文件所在的目录

__filename: 表示当前正在执行的js文件的完整路径

// 读取文件中的路径问题

// 解决在文件读取中'./相对路径'的问题
// 解决办法:__dirname, __filename
// __dirname: 表示当前正在执行的js文件所在的目录
// __filename: 表示当前正在执行的js文件的完整路径
// console.log(__dirname);
// console.log(__filename);

fs = require('fs');

// '\\' 转义运算符
var filename = __dirname + '\\' + 'hello.txt';
fs.readFile(filename,'utf8', function(err, data) {
  if(err) throw err;
  console.log(data);
});

5、读取文件中的路径拼接问题

// 读取文件中的路径拼接问题

var fs = require('fs');
var path = require('path');


 在windows系统下是\但在Linux系统下是/
// 如果__dirname末尾已经带斜杠,再手动拼接上一个就会出错
// '\\' 转义运算符
// var filename = __dirname + '\\' + 'hello.txt';

// path.join() 方法用于拼接并生成规范化的路径。
var filename = path.join(__dirname, 'hello.txt');
console.log(filename);

fs.readFile(filename,'utf8', function(err, data) {
  if(err) throw err;
  console.log(data);
});

6、创建文件夹

// 创建文件夹
const fs = require('fs');
const path = require('path');

var filename = path.join(__dirname, 'file');
fs.mkdir(filename, function (err) {
  if(err) {
    console.log('创建文件夹失败,失败原因:' + err);
  } else {
    console.log('文件夹创建成功');
  }
});

7、创建多层文件夹

// 创建文件夹
const fs = require('fs');
const path = require('path');

var filename = path.join(__dirname, 'file');
fs.mkdir(filename, function (err) {
  if(err) {
    console.log('创建文件夹失败,失败原因:' + err);
  } else {
    console.log('第一层文件夹创建成功');
    var filename2 = path.join(filename, 'mkdir-study');
    fs.mkdir(filename2, function (err) {
      if(err) {
        console.log('创建文件夹失败,失败原因:' + err);
      } else {
        console.log('第二层文件夹创建成功');
      }
    });
  }
});

在使用node模块中的方法的时候,回调函数的第一个参数是error(错误对象),这就是错误优先(error-first)回调

异步操作无法通过try-catch来捕获异常,要通过判断error来判断是否出错

同步操作可以通过try-catch来捕获异常

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值