1.fs模块

在node.js中,所有文件的操作都是通过fs模块来实现的。包括文件目录的创建,删除,查询以及文件的读取,写入。

在fs模块中,所有的方法都分成同步和异步两种实现,具有sync后缀的为同步方法,不具有sync后缀的未异步方法。同步方法使用 = 接收返回的结果和数据,而异步方法多一个参数(回调函数),返回的结果和数据以函数参数的形式返回

操作文件前,先引入fs模块

var fs = require("fs")

2.文件读取

fs.readFile() :异步读取

参数一:文件路径,如果这个文件不存在,则会出错。

参数二:可选,编码类型,默认为buffer

参数三:回调函数,它共有两个参数(err,data)如果文件写入成功,则err为null,否则为错误代码,data为读取文件的内容

注意:如果要返回字符串,可以在调用readFile时传入参数utf-8,或者直接用toString()来转化data的数据格式。

let fs = require("fs");
fs.readFile('day.txt',function(err, data) {
console.log(err)
if (err) {
console.log('文件读取失败,错误原因:' + err);
} else {
console.log('文件读取成功');
console.log(data);//字节数组
console.log(data.toString());//今天星期二
}
})

设置encoding为 'utf-8'

let fs = require("fs");
fs.readFile('day.txt','utf-8',function(err, data) {
if (err) {
//如果去读出错,抛出错误后不会再执行后面的代码
throw err;
}
console.log(data);//今天星期二
})

3.写文件

fs.writeFile() 异步写文件

参数一:被写入的文件路径,如果这个文件不存在,则会新建一个。

参数二:被写入的内容

参数三:回调函数,里面的有个参数err,如果文件写入成功,则err为null,否则为错误代码

let fs = require("fs");
var str = "今天是星期三";
fs.writeFile('day.txt', str,function(err) {
if (err) {
console.log('文件写入失败,错误原因:' + err);
} else {
console.log('文件写入成功');
}
})

day.txt的文件内容覆盖成 "今天是星期三"

4.获取当前执行文件的路径

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

__filename:当前执行的js文件的完整路径

//当前js文件的完整路径为 F:\node\02fs\test.js
let fs = require("fs");
console.log(__dirname);//F:\node\02fs
console.log(__filename);//F:\node\02fs\test.js

注意:这两个变量虽然看似全局的,但实际上不是。当执行这个js文件时,这个文件中的代码会被放入一个自执行函数中来执行,而__dirname和__filename是这个自执行函数的参数而已,所以能够直接使用,即使它不是全局变量。

5.路径拼接

如果要操作的文件与当前文件不再同一目录,则需要用到路径拼接。但是每个操作系统对应的路径格式是有差异的,例如windows的路径:F:\node\02fs\test.js使用"",而Linux和苹果系统使用的是"/",所以手动拼接路径就有可能出现问题,为了解决这个问题,可以使用path模块的join()方法来拼接路径

语法:path.join()

这个方法一般与__dirname配合使用

const fs = require("fs");
const path = require('path'); //获取当前目录下source/02.txt文件的路径
var fileName = path.join(__dirname,"source",'02.txt');
//打印路径
console.log(fileName);//F:\node\02fsAndPath\source\02.txt
//根据这个文件路径读取这个文件
fs.readFile(fileName,function(err,data) {
if (err) {
console.log('文件读取失败,错误原因:' + err);
} else {
console.log('文件读取成功');
console.log(data.toString());//今天到底是星期几?
}
})

6.创建文件夹

fs.mkdir()

参数一:要创建的文件夹的路径

参数二:回调函数

实例:在当前文件夹下创建3个目录

const fs = require("fs");
const path = require('path'); var nameArr = ["html","css","javascript"] //遍历数组,依次创建文件夹
for(let i=0;i<nameArr.length;i++){
//拼接要创建的文件夹的路径
var dirPath = path.join(__dirname,nameArr[i])
//根据路径创建目录
fs.mkdir(dirPath,function(err){
if(err){
console.log(err)
}else{
console.log(nameArr[i] + "文件夹创建成功")
}
})
}

这个例子见证了什么叫异步操作,后面执行的代码反而先执行完毕

Node.js 文件读写的更多相关文章

  1. Node.js文件操作二

    前面的博客 Node.js文件操作一中主要是对文件的读写操作,其实还有文件这块还有一些其他操作. 一.验证文件path是否正确(系统是如下定义的) fs.exists = function(path, ...

  2. Node.js 文件上传 cli tools

    Node.js 文件上传 cli tools byte stream 断点续传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  3. Node.js文件操作一

    Node.js和其他语言一样,也有文件操作.先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开.关闭.读.写.文件信息.新建删除目录.删除文件.检测文件路径等.在node.js中也是 ...

  4. Node.js文件编码格式的转换

    项目很多 lua 文件不是 utf-8格式,使用 EditPlus 查看的时候,显示为ASCII.还有的是带BOM的,带BOM倒好处理,之前写过,有一定规律. ASCII编码就比较蛋疼,通过搜索网上资 ...

  5. Node.js 文件输入

    最近在尝试用 JavaScript (Node.js) 写题.为此,特地看了 ECMAScript 2017 Language Specification(大雾).写题一般是从文件输入,确切地说是,将 ...

  6. Node.js文件上传

    Node.js express使用Multer实现文件上传html部分 <div> <h3>文件上传:</h3> 选择一个文件上传: <br/> < ...

  7. Node.js 文件操作

    1.新建一个文件a.txt,并写入"你好,这是一个新文件.". writeFile 代码 demo1.js var fs = require('fs'); console.log( ...

  8. Node.js 文件夹目录结构创建

    第一次接触NodeJS的文件系统就被它的异步的响应给搞晕了,后来发现NodeJS判断文件夹是否存在和创建文件夹是还有同步方法的,但是还是想尝试使用异步的方法去实现. 使用的方法:fs.exists(p ...

  9. node.js读写文件

    关于node.js的读写操作,应用场景有很多.比如其中这样的一个场景,如何获取全局的token.这就涉及到写和读操作了. 写操作: var fs = require("fs"); ...

  10. Node.js的线程和进程

    http://www.admin10000.com/document/4196.html 前言 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够 ...

随机推荐

  1. springboot-实现csv文件导出功能

    excle文件导出,会遇到一个65535行限制的问题,就是导出的数据行数超过65535行就会导出失败,这个是excle本生的限制,这种情况下通常将导出的格式改成csv这样就可以跨过这个限制,同时生成的 ...

  2. Qt连连看(二)界面制作

    我们先来制作两个简单的页面 一.主界面 要求在main.cpp里面设置对应的槽函数 (1) 点击开始游戏能跳转到游戏界面 (2) 点击帮助能够显示游戏说明,如下 二.游戏界面 要求如下: (3) 初始 ...

  3. 【赵渝强老师】什么是PL/SQL?

    一.什么是PL/SQL? PL/SQL(Procedure Language/SQL)是oracle在标准的sql语言上的扩展.ql/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许私用条件语 ...

  4. excel江湖异闻录--华麒麟

    认识他应该是在18.19年左右,那时就感觉这也是个高手,同大部分的高手一样,痴迷函数,热衷创造.挑战不规范的数据. 后来他消失了好长一段时间,群里的同学都以为他退圈了,偶有少数的同学想起他,言语都带着 ...

  5. [快速阅读八] HDR->LDR:Matlab中tonemapfarbman函数的解析和自我实现。

    最近受朋友的委托,想自己实现Matlab里的一个HDR转LDR的函数,函数名是tonemapfarbman,乘着十一假期,稍微浏览下这个函数,并做了一点C++的实现和优化. 为了看到这个函数的效果,需 ...

  6. Linux内核虚拟内存管理之匿名映射缺页异常分析

    今天我们就来讨论下这种缺页异常,让大家彻底理解它.注:本文使用linux-5.0内核源代码.文章分为以下几节内容: 匿名映射缺页异常的触发情况 0页是什么?为什么使用0页? 源代码分析 3.1 触发条 ...

  7. docker-compose -- 创建 redis && mysql

    version: '3' services: nest-admin-web: image: buqiyuan/vue3-antdv-admin:stable container_name: nest- ...

  8. 9. JS的数据类型,区别

    js 有2大数据类型分类 : 基本数据类型: 1. string 字符串 使用单.双引号包裹,或者使用反引号包裹 2. number 数字类型 3. boolean 布尔值 true false 4. ...

  9. 013 Python 变量的内存管理(学点底层东西显得你异于常人)

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/18 21:13 # Filename:011 Python约定俗称的常量 ...

  10. c++11大括号初始化

    C++11可以将{}初始化器用于任何类型(可以用等号,也可以不用) 数组.集合初始化 在C++11中,集合(列表)的初始化已经成为C++的一个基本功能,被称为"初始化列表": // ...