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\nodejs\chapter>node 文件操作.js
开始写入.........
写入成功

D:\Program Files\nodejs\chapter>

 

(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\nodejs\chapter>node 异步文件写入.js
1
开始写入.........
3
写入成功
2

D:\Program Files\nodejs\chapter>

 

(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\nodejs\chapter>node 异步文件读取.js
data
You often to do the error thing


D:\Program Files\nodejs\chapter>

 

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

/*
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\nodejs\chapter>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\nodejs\chapter>node 异步文件读取.js
1
2
写入成功
3
You often to do the error thing

D:\Program Files\nodejs\chapter>

 三:获取文件的信息:

/*
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\nodejs\chapter>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:\Windows\OCR\zh-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:\Windows\OCR\zh-cn\MsOcrRes.orp
输出:

D:\Program Files\nodejs\chapter>node path.js
MsOcrRes.orp
C:/Windows/OCR/zh-cn
.orp
string
lujin:C:\Windows\OCR\zh-cnMsOcrRes.orp.orp
lujin1:C:/Windows/OCR/zh-cn/MsOcrRes.orp
lujin2:C:\Windows\OCR\zh-cn\MsOcrRes.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\nodejs\chapter>node 删除文件.js
读取D:/Program Files/nodejs/chapter/test2目录
test1.txt
test2.txt
准备删除test2目录
test1.txt文件删除成功
test2.txt文件删除成功
目录删除成功

 

5:文件和目录的权限:

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

 

  

posted @ 2020-03-09 22:19  calm寻路人  阅读(569)  评论(0编辑  收藏  举报