fs-文件系统

fs模块:

一:主要对文件和目录进行操作,一般情况下,fs模块与path模块一起使用。

const pt = require("path");

const fs = require("fs");

二:读取指定目录下的文件和文件夹

(1) fs.readdir(path[, options], callback)

let dir = "E:\\HBuilder文件\\nodejs学习\\module";
fs .readdir(dir,function(err,files){

//抛出异常
    if(err) throw err;
    console.log(files);
})

输出:

[ 'module01.js',

  'module02.js',

  'module04.js',

  'module05.js',

  'node_modules'

 ]

(2) 异步执行(工作流程:先把指定路径下的文件全部加载完毕,再执行回调函数,把加载过来的文件返回一个数组,全部放在回调函数的files参数里面)

(3) fs.readdirSync(path[, options]):同步执行

let files = fs.readdirSync(dir);
console.log(files);

输出:

[ 'module01.js',

  'module02.js',

  'module04.js',

  'module05.js',

  'node_modules'

 ]

(4) 同步执行(工作流程:没有回调函数,所有的数据通过函数的返回值进行接收。)

(5) 异步:所有的数据通过回调函数进行接收,等当前操作全部走完,才执行回调函数;异步遇到阻塞的时候会分一个单线程出去,不会耽误主线程的执行。

(6) 同步:所有的数据通过函数的返回值进行接收,并阻塞后面代码的执行;同步要等阻塞执行完才能执行后面的代码,有阻塞效果。

三: 状态查询:statstatSync

(1) fs.stat(path, callback):异步状态查询

fs.stat(dir,function(err,stats){
    if(err) throw err;
    console.log(stats.isFile());
})

输出:false

(2) stats:包含了当前这个文件校验出来的很多数据(得到指定文件的所有信息);则直接可以stats.isFile() stats.isDirectory()

(3) fs.statSync(path):同步状态查询

let stats = fs.statSync(dir);
console.log(stats.isDirectory());

输出:true

四:给定一个路径,判断该路径下哪些是文件,哪些不是文件?

"use strict";
const pt = require("path");
const fs = require("fs");

let dir = "E:\\HBuilder文件\\nodejs学习\\module";

fs.readdir(dir,function(err,files){
    if(err) throw err;
    //读取到dir路径下的所有文件和文件夹封装成一个数组放在files里面
    
files.forEach(function(file){
        //files数组进行遍历
        //files:[module01.js,module02.js,module04.js,node_modules]是一个数组
        //file:module01.js  module02.js  module04.js  node_modules是数组里面的内容
        
let newDir = pt.join(dir,file);
        //给dir路径下的文件和文件夹都拼接出了绝对路径
        
fs.stat(newDir,function(err,stats){
            //利用绝对路径newDir,获得每个路径下的文件的信息放到stats里
            
if(stats.isFile()){
                //利用stats作判断
                
console.log(file+"是文件");
            }else{
                console.log(file+"不是文件");
            }
        })
    })
})

 

输出:

module01.js是文件

module02.js是文件

module04.js是文件

module05.js是文件

module06.js是文件

node_modules不是文件

五:如果想要实现多层搜索(即搜索到文件夹时再往里搜索),则可将上面这种方法封装成一个函数,利用递归的方式逐层搜索。

function searchfile(dir){
    fs.readdir(dir,function(err,files){
        if(err) throw err;
        //读取到dir路径下的所有文件和文件夹封装成一个数组放在files里面
        
files.forEach(function(file){
            //files数组进行遍历
            //files:[module01.js,module02.js,module04.js,node_modules]是一个数组
            //file:module01.js  module02.js  module04.js  node_modules是数组里面的内容
            
let newDir = pt.join(dir,file);
            //给dir路径下的文件和文件夹都拼接出了绝对路径
            
fs.stat(newDir,function(err,stats){
                //利用绝对路径newDir,获得每个路径下的文件的信息放到stats里
                
if(stats.isFile()){
                    //利用stats作判断
                    
console.log(file+"是文件");
                }else{
                    searchfile(pt.join(dir,file));
                }
            })
        })
    })
}
searchfile("E:\\HBuilder文件\\nodejs学习\\module");

输出:

module01.js是文件

module02.js是文件

module04.js是文件

module05.js是文件

module06.js是文件

module07.js是文件

module03.js是文件

六:下面展示同步操作:

//同步操作
let files = fs.readdirSync(dir);
//同步没有回调函数,所有的数据通过函数的返回值进行接收
files.forEach(function(file){
    let newDir = pt.join(dir,file);
    let stats = fs.statSync(newDir);
    //同步没有回调函数,所有的数据通过函数的返回值进行接收
    
if(stats.isFile()){
        //作判断
        
console.log(file+"是文件");
    }else{
        console.log(file+"不是文件");
    }

})

七: fs.watch(filename[, options][, listener])

监控指定文件是否有改动,如果有改动,则自动执行

let dir = "E:\\HBuilder文件\\nodejs学习\\js\\计算器.js";
fs.watch(dir,function(err,data){
    if(err) throw err;
    console.log("该文件被改动了");
})

 八:读取文件里面的内容:readFile()

(1) 异步:

let dir = "E:\\HBuilder文件\\nodejs学习\\js\\计算器.js";
fs.readFile(dir,function(err,data){
    if(err) throw err;
    console.log(data.toString());
})

(2) 同步:

let data = fs.readFileSync(dir);
console.log(data.toString());

(3) 输出的是该文件里面的内容

九:将数据写到指定路径下

(1) 异步:

fs.writeFile("C:\\Users\\Administrator\\Desktop\\test.html","我爱中国",function(err){
    if(err) throw err;
})

(2) 同步:

fs.writeFileSync("C:\\Users\\Administrator\\Desktop\\test.txt","我爱中国");

十:文件的复制

let dir = "E:\\HBuilder文件\\nodejs学习\\js\\计算器.js";

fs.readFile(dir,function(err,data){
    if(err) throw err;
    fs.writeFile("C:\\Users\\Administrator\\Desktop\\test_d.html",data,function(err){
        //这个回调函数里面没有参数,可以省略不写该回调函数
        
if(err) throw err;
    });
})


你可能感兴趣的:(fs-文件系统)