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分类中有关于文件和目录权限的原理.

      

  • 相关阅读:
    包教包会之Open Live Writer设置代码样式
    走近Java之HashMap In JDK8
    走近Java之包装器类Integer
    走近Java之幕后的String
    一点心得
    一个简单的多线程代码实例
    C++实现快速排序
    力扣1025. 除数博弈
    力扣1721. 交换链表中的节点
    力扣1422. 分割字符串的最大得分
  • 原文地址:https://www.cnblogs.com/1314bjwg/p/12452033.html
Copyright © 2011-2022 走看看