zoukankan      html  css  js  c++  java
  • nodejs 操作文件系统读取写入文件

    我们通过fs这个模块来对文件系统进行操作,对于文件系统操作一般都有同步、异步方法,两者区别,同步等有返回结果时候,在继续执行后面的代码,异步是不等返回结果,直接执行后面的代码,待有返回结果时候,通过回调函数来做出处理。一般同步方法函数名在异步方法名字后面加Sync,如异步读取文件readFile,同步读取文件为readFileSync,大多数情况用异步方法、但是读取配置文件要用同步方法。

    readFileSync(path,[options])

    创aaa.js文件

    readFile(path,[options],function(err,data){});
    var fs= require("fs");
    fs.readFile('./aa.txt',function(err,data){
        if(err){
            console.log("bad")
        }else{
            console.log("ok");
            console.log(data);
            console.log(data.toString());
            }
    })

    创建aa.txt文件

    写入你好


    若我们异步读取两个文件,那么这两个文件的结果谁先返回,我们是不知道的,这得看文件大小,所以我们要想有先后顺序的读取,那么得在回调函数中写读取第二个文件

    var fs= require("fs");
    fs.readFile('../file.txt',function(err,data){
        if(err){
            console.log("bad")
        }else{
            console.log("读取第一个文件成功");
            console.log(data.toString());
            fs.readFile('../file2.txt','utf-8',function(err,data){
                if(err){
                   console.log("读取第二个文件失败");
                }
                if(data){
                    console.log("读取第2个文件成功");
                    console.log(data);
                }
            })
            }
    })
    

      

    options

    flag:文件的操作情况,r表示这个文件只读,w表示写入文件,a追加文件(常用的三个)

    encoding:读取文件用的编码,utf-8,base64,ascii我们不指定编码,那么返回的data为一个buffer

    var fs= require("fs");
    fs.readFile('../file.txt',{flag:'r+',encoding:'utf-8'},function(err,data){
        if(err){
            console.log("bad")
        }else{
            console.log("读取第一个文件成功");
            console.log(data);
            fs.readFile('../file2.txt','utf-8',function(err,data){
                if(err){
                   console.log("读取第二个文件失败");
                }
                if(data){
                    console.log("读取第2个文件成功");
                    console.log(data);
                }
            })
            }
    })

    writeFile(filename,data,[options],callback)

    wrtieFileSync(filename,data,[options])

    filename:要写入的文件

    data:写入文件的数据可以是字符串,可以是buffer

    options:flag:对写入文件的操作默认为w,encoding:编码,mode:权限

    callback:回调函数

    var fs = require("fs");
    var data="aa";
    fs.writeFile('./aa.txt',data,{flag:'w',encoding:'utf-8',mode:'0666'},function(err){
         if(err){
             console.log("文件写入失败")
         }else{
             console.log("文件写入成功");
             console.log(data)
    
         }
    
    }) 

    var fs = require("fs");
    var data="天下太平-追加";
    fs.writeFile('./aa.txt',data,{flag:'a',encoding:'utf-8',mode:'0666'},function(err){
         if(err){
             console.log("文件写入失败")
         }else{
             console.log("文件追加成功");
             console.log(data)
    
         }
    
    }) 

    readFile 、writeFile 同时使用

    读取一张图片,之后写入到另一张图片

    var fs =require("fs");
    fs.readFile('./1.png','base64',function(err,data){
        if(err){
            console.log("取图片1失败");
        }else{
            fs.writeFile('./2.png',data,'base64',function(err){
               console.log("图片2写入成功");
            })
        }
    })

    writeFile(filename,data,{flag:'a'},callback)与appendFile一致

    var fs = require("fs");
    var data="你好-追加appendFile";
    fs.appendFile('./aa.txt',data,function(err){
         if(err){
             console.log("文件写入失败")
         }else{
             console.log("文件追加成功");
    
         }
    
    }) 

    从指定位置开始读取文件

    fs.open fs.read结合实现从指定位置读取文件

    fs.open(filename,options,[mode],callback)

    callback(err,fd)

    var fs =require("fs");
    fs.open('./aa.txt','r','0666',function(err,fd){
        if(err){
           console.log("打开失败");
        }else{
           console.log(fd);
        }
    })

    fs.read(fd,buffer,offset,length,pasition,callback)

    fd:ope方发返回的文件描述符号

    buffer:读取的文件写到那个缓存区中

    offset:从缓存区中那个字节开始写入

    length:写入多长的字节,

    pasitong:文件指定位置处开始写入缓存区

    var fs =require("fs");
    fs.open('./wfile.txt','r','0666',function(err,fd){
        if(err){
           console.log("打开失败");
        }else{
           var buf=new Buffer(128);
           console.log(buf)
           fs.read(fd,buf,1,30,0,function(err,bytesRead,buf){
               if(err){
                   console.log("指定位置读取文件失败");
               }else{
                   console.log(bytesRead);
                   console.log(buf);
               }
           })
        }
    })

    var bytesRead=readSync(fd,buffer,offset,length,position)

    指定位置写数据

    fs.open()yu sf.write(fd,buffer,offset,length,position, callback)

    var fs=require("fs");              

    //这是追加   ‘w’ 是替换原来的文件内容  

    fs.open('./wfile.txt','a','0666',function(err,fd){
        if(err){
           console.log("打开文件失败");
        }else{
           var buffer=new Buffer("小鸟");
           console.log(buffer.length);
           fs.write(fd,buffer,0,buffer.length,0,function(err,written,buffer){
               if(err){
                  console.log("指定位置写入文件失败");
               }else{
                  console.log(written);
                  console.log(buffer.toString());
               }
               
           })
         fs.fsync(fd);
           fs.close(fd);    
    }
    })

    fs.fsync(fd)该方法吧缓存区的数据同步到文件中

    fs.close(fd)关闭文件

  • 相关阅读:
    根据列的值改变DataGridView行的颜色
    在WebForm上进行拖拽
    使用jQuery, CSS, JSON 和ASP.NET打造一个新闻轮换控件
    C#语法中的select
    C#事件(event)解析
    一步一步教你打造一个Numeric TextBox控件
    2010创造奇迹的一年
    超级简单:在一个TextArea中如何限制行数和字符数
    如何成为人尽皆知的C#开发人员
    一个"简单"的ASP.NET的服务器控件
  • 原文地址:https://www.cnblogs.com/yu-hailong/p/7650853.html
Copyright © 2011-2022 走看看