zoukankan      html  css  js  c++  java
  • node.js的文件操作

    一:文件写入:

      (1):文件操作需要加载fs核心模块。

    /*
    文件写入:分为同步和异步写入。
    1:同步写入函数:fs.writeFileSync(file,data,options) ;
    2:异步写入函数:fs.writeFile(file,data,options,callback) ;
    3:参数解释:options和callback。
    options参数值为一个对象,包含三个属性{encoding,mode,flag},默认为utf-8,mode:0x666,flag:'w'
    callback:为回调函数。
    flag为进行写入时模式选择。有w,r+(打开文件进行读取和写入,如果文件不存在则发生异常.)
    
    */
    /*同步写入*/
    var f = require('fs'); //加载fs核心模块.
    function test()
    {
        console.log('开始写入.........');
        try
        { //这里mode没有写表示采用默认值。
            var my_option = {encoding:'utf-8'
            ,flag:'a'};//a:表示追加,如不存在则创建,
        /*w:如存在则截断,在写入,截断是指从
        文件内容中某个位置开始写,如果从零开始写则原来文件中的内容将都被删除*/
        var data = 'I think that we must respect of myself';
            f.writeFileSync('D:/Program Files/nodejs/chapter/a.txt',data,my_option);
            console.log('写入成功');
        }
        catch(e)
        {
                console.log('写入失败'+e);
        }
    }
    test();
    输出:

    D:Program Files odejschapter>node 文件操作.js
    开始写入.........
    写入成功

    D:Program Files odejschapter>

     

    (2):异步文件写入:

    /*异步文件写入*/
    var f = require('fs');
    var data = 'You often to do the error thing';
    console.log(1);
    console.log('开始写入.........');
    f.writeFile('a.txt',data,function(error){
        if(error)
        {
            console.log('i am sorry'+error);
        }
        else
        {
            console.log('写入成功');
        }
        console.log(2);
    });
    console.log(3);
    //打印这些数字是为了测试异步函数执行的顺序.

    输出:

    D:Program Files odejschapter>node 异步文件写入.js
    1
    开始写入.........
    3
    写入成功
    2

    D:Program Files odejschapter>

     

    (3):向文件内追加内容

      1:在options为默认选择时,在对指定的文件名进行操作时,如果文件存在则会将其从零进行截断,也可以认为是覆盖。

      所以使用追加的方式就能解决该问题:

      2:异步追加函数:appendFile(file,data,options,callback);

      3:代码省了;

    二:文件读取:由于同步文件操作使用的不多,便..................................。

      (1):代码:

      

    /*
    1:f.readFile(file,options,callback);
    2:callback:读取的callback和写入的callback不同,
    读取到的数据将由回调函数的第二个参数接受.
    */
    /*这里回调函数定义放在外面*/
    
    var f = require('fs');
    f.readFile('D:/Program Files/nodejs/chapter/a.txt',function(err,data)
        {
            if(err)
        {
             console.log('文件读取失败'+err);
        }
        else
        {
            console.log('data');
        }
        console.log(data.toString());
    
        });
    输出:

    D:Program Files odejschapter>node 异步文件读取.js
    data
    You often to do the error thing

    
    

    D:Program Files odejschapter>

     

    其他写法的输出,怎么解释

    /*
    1:f.readFile(file,options,callback);
    2:callback:读取的callback和写入的callback不同,
    读取到的数据将由回调函数的第二个参数接受.
    */
    /*这里回调函数定义放在外面*/
    
    var f = require('fs');
    f.readFile('D:/Program Files/nodejs/chapter/a.txt',function(err,data)
        {
            if(err)
        {
             return console.log('文件读取失败'+err);
        }
        else
        {
             return console.log('读取成功');
        }
       console.log(1); //这个部分没有执行. console.log(data.toString());    });
    输出: //这是因为异步的原因,可以参考异步文件写入.

    D:Program Files odejschapter>node 异步文件读取.js
    读取成功

    /*
    1:f.readFile(file,options,callback);
    2:callback:读取的callback和写入的callback不同,
    读取到的数据将由回调函数的第二个参数接受.
    */
    /*这里回调函数定义放在外面*/
    
    var f = require('fs');
    console.log(1);
    f.readFile('D:/Program Files/nodejs/chapter/a.txt',function(err,data)
        {
            if(err)
        {
              console.log('文件读取失败'+err);
        }
            else
        {
            console.log(2);
              console.log('写入成功');
        }
        console.log(3);
        console.log(data.toString());
        });
    输出:

    D:Program Files odejschapter>node 异步文件读取.js
    1
    2
    写入成功
    3
    You often to do the error thing

    D:Program Files odejschapter>

     三:获取文件的信息:

    /*
    1:获取文件信息的异步函数:fa.stat(path,callback);
    callback为回调函数,带有两个参数,如(err,stats),stats是fa.stats对象。
    2:在js中函数是可以由变量来接受的和对象的属性。对象也可以由一个变量或者
    其他对象的属性来接受。
    */
    var fa = require('fs');
    //
    fa.stat('/Program Files/nodejs/chapter/a.txt',function(err,sta){
    console.log(sta.isFile()); //判断其是否是文件.
    console.log(typeof sta);
    console.log(sta);
    });
    //sta是fa.stats对象,fs.stat(path)执行后,会将Stats类的实例返回给其回调函数。
    //Stats类提供了判断文件的相关属性。

    输出:

    D:Program Files odejschapter>node 获取文件信息.js
    true
    object
    Stats {
    dev: 3532891753,
    mode: 33206,
    nlink: 1,
    uid: 0, //
    gid: 0, 
    rdev: 0,
    blksize: 4096,
    ino: 562949953523803,
    size: 31,
    blocks: 0,
    atimeMs: 1583763104750.8972,
    mtimeMs: 1583763104750.8972,
    ctimeMs: 1583763104750.8972,
    birthtimeMs: 1583759686356.3164,
    atime: 2020-03-09T14:11:44.751Z,
    mtime: 2020-03-09T14:11:44.751Z,
    ctime: 2020-03-09T14:11:44.751Z,
    birthtime: 2020-03-09T13:14:46.356Z
    }

     4:对文件和目录进行操作

    (1):路径操作

    var ph = require('path');
    //console.log(ph);
    var str = 'C:/Windows/OCR/zh-cn/MsOcrRes.orp';
    console.log(ph.basename(str)); //获取文件名
    console.log(ph.dirname(str));  //获取根目录
    console.log(ph.extname(str));  //获取文件名的后缀
    var s = ph.extname(str);
    var d = ph.basename(str);
    var f = ph.dirname(str);
    console.log(typeof s);
    lujin = ph.join(f+d+s);
    console.log('lujin:'+lujin); //拼接路径lujin:C:WindowsOCRzh-cnMsOcrRes.orp.orp
    var lujin1 = ('C:/Windows'+'/OCR'+'/zh-cn'+'/MsOcrRes.orp');
    console.log('lujin1:'+lujin1);//lujin1:C:/Windows/OCR/zh-cn/MsOcrRes.orp
    var lujin2 = ph.join('C:/Windows','/OCR','/zh-cn','/MsOcrRes.orp')
    console.log('lujin2:'+lujin2);//lujin2:C:WindowsOCRzh-cnMsOcrRes.orp
    输出:

    D:Program Files odejschapter>node path.js
    MsOcrRes.orp
    C:/Windows/OCR/zh-cn
    .orp
    string
    lujin:C:WindowsOCRzh-cnMsOcrRes.orp.orp
    lujin1:C:/Windows/OCR/zh-cn/MsOcrRes.orp
    lujin2:C:WindowsOCRzh-cnMsOcrRes.orp

     

    (2):目录操作

    /*
    1:对文件,目录,进行增加,读取,和删除等操作.
    2:创建目录的异步函数:fs.mkdir(path,[,mode],callback)
        mode:表示目录权限,默认为0777,
    */
    var fs = require('fs');
    console.log('在D:/Program Files/nodejs/chapter目录下创建一个test目录');
    fs.mkdir('D:/Program Files/nodejs/chapter/test3',function(err){
        if(err)
        {
            return console.error(err);
        }
        console.log('目录创建成功');
    });
    /*
    3:用于读取目录的异步函数:
    fs.readdir(path,callback);
    返回的是一个包含目录下的所有文件.
    */
    var Z = fs.readdir('D:/Program Files/nodejs/chapter/test2',function(err,files){
        if(err)
        {
            return console.log(err);
        }
        //遍历所有文件
        console.log('Z类型'+typeof Z); 
        console.log('files类型'+typeof files) 
        files.forEach(function(file){
            console.log(file);
            //注意readdir函数没有返回,
            console.log('Z类型'+typeof Z);
        })
    });
    //这里犯了一个错误,readdir为异步函数.所以打印的是undfined
    console.log('Z类型'+typeof Z); 
    输出:

    在D:/Program Files/nodejs/chapter目录下创建一个test目录
    Z类型undefined
    目录创建成功
    Z类型undefined
    files类型object
    test1.txt
    Z类型undefined
    test2.txt
    Z类型undefined

    (3):删除文件,然后才能删除目录

    /*
    4:删除目录的异步函数.fs.rmdir(path,callback);
        删除目录有一个要求就是该目录必须为空,
    5:删除文件的异步函数:fs.unlink(path,callback);
        所以只有读取目录下所有的文件,并且将其删除干净,才能删除目录
    */
    var fs = require('fs');
    console.log('读取D:/Program Files/nodejs/chapter/test2目录');
    fs.readdir('D:/Program Files/nodejs/chapter/test2',function(err,files){
        if(err)
        {
            return console.error(err);
        }
        //遍历文件D:/Program Files/nodejs/chapter/test2
        files.forEach(function(file){
            console.log(file); //输出文件名
            //删除文件
            fs.unlink('D:/Program Files/nodejs/chapter/test2/'+file,function(err){
                if(err)
                {
                    return console.error(err);
                }
                console.log(file+'文件删除成功');
            });
        });
    console.log('准备删除test2目录');
    fs.rmdir('D:/Program Files/nodejs/chapter/test2',function(err){
        if(err)
        {
            return console.error(err);
        }
        console.log("目录删除成功");
    });
    });
    //注意rmdir一定要写到readdir这个异步函数中.
    输出:

    D:Program Files odejschapter>node 删除文件.js
    读取D:/Program Files/nodejs/chapter/test2目录
    test1.txt
    test2.txt
    准备删除test2目录
    test1.txt文件删除成功
    test2.txt文件删除成功
    目录删除成功

     

    5:文件和目录的权限:

    (1):在Linux分类中有关于文件和目录权限的原理.

      

  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/1314bjwg/p/12452033.html
Copyright © 2011-2022 走看看