Node.jsのファイルシステム

8999 ワード

Node.jsのファイルシステム
JavaScriptはファイルを操作する能力がないですが、Node.jsはできます.Node.jsはファイルを操作するインターフェースを提供しましたが、インターフェースが多すぎます.主にいくつかのよく使うインターフェースを使います.
ファイルシステムモジュールは、標準的なPOSIXファイルI/O動作をパッケージ化したセットである.このモジュールはrequire('fs')によって使用されます.すべての方法には同期と非同期の二つのモードがある.
Node.jsのファイルシステムAPI
1.ファイルを読み込むNode.jsは2つの方法でファイルを読み込むことを提供しています.一つは非同期でファイルを読み込むことです.

var fs = require("fs");
//          ,      
function readFile (fileUrl) {
  console.log("--    --");
  fs.readfile(fileUrl,function(err,data){
    if(err){
      console.log("--    --")
    }
    console.log("       :"+data.toString());
  })
}
readFile("./src/test.txt");
//     ,          
//          ,       
//       
function readFileSync(fileUrl) {
    console.log("----      ----");
    var data = fs.readFileSync(fileUrl);
    console.log("        " + data.toString());
    console.log("----    ----")
}
readFileSync("./src/test.txt");
//           ,   ,   ,    ;

2.ファイルに書き込む
// fs.writeFile(filename,data,[options],callback);
/**
 * filename,     ,   
 * data,      ,       Buffer  
 * [options],flag,mode(  ),encoding,    
 * callback           ,    err
 */
//    
var w_data = "       ";
fs.writeFile("./src/test.txt",w_data,function (err) {
  if (err) {
    console.error(err);
  }
  console.log("    ")
})
//        ,                  ,            。
//                       ;

3.追加内容

// fs.appendFile(filename,data,[options],callback)
/**
 * filename,    ,   
 * data,     
 * options,  ,flag,mode。。。
 * callback,    err
 */
//     
var appendData = "        ";
fs.appendFile("./src/test.txt",appendData,function (err) {
  if (err) {
    console.error(err);
  }
  console.log("      !")
})

4.ファイルを開け、ファイルを読み込み、ファイルを切り取り、ファイルを書き込み、ファイルを閉じます.
4.1まずファイルを開けてみます.
fs.open(filename,flag,[mode],callback)
    
/**
 * filename,    
 * flags,    ,          
 * mode,  ,    
 * callback,       err,   fd,  fd     ,    
 * fd     ,              ,window       
 */
/*Flag    
r            。           。
r+           。           。
rs            。
rs+              。
w            ,          。
wx     'w',          ,       。
w+           ,          。
wx+    'w+',           ,       。
a            ,          。
ax     'a',           ,       。
a+             ,          。
ax+    'a+',           ,         。
*/

一例の書き方:
fs.open("./src/test.txt","r+",function (err,fd) {
  if (err) {
    console.error(err);
  }
  console.log(fd)// fd    windows     ,          ,     
  //        ,             id,         ,      id    
  console.log("      ")
  //      ,  ,        ,       ,       。
})

4.2ファイルを読み込み、開けられました.必ず読みます.
file.read(filename,buffer,offset,length,position,callback)
/**
 * fd,   fs.open             
 * buffer,   Buffer  ,v8         
 * offset,   ,             ,      
 * length,   ,       
 * position,   ,        ;          
 * callback(err, bytesRead, buffer),            ,bytesRead       ,         
 */
 
ファイルの読み込み例:
fs.open("./src/test.txt","r+",function (err,fd) {
    if (err) {
        console.error(err)
    }
    console.log("      ")
    console.log("      ");
    var buffer = new Buffer(1024);
    // fd  read      ,            
    fs.read(fd,buffer,0,buffer.length,0,function (err,bytesRead,buffer) {
        if (err) {
            console.error(err)
        }
        console.log(bytesRead+"     ")
        if (bytesRead>0) {
            console.log("     "+buffer.toString())
        }
    })
})

4.3書類の切り取り
fs.// fs.ftruncate(fd,len,callback)
/**
 * fd,       fd
 * len,      
 * callback,    ,    
 */
 
ファイルの例を切り取り、切り取りが完了したらファイルを閉じます.
//     ,    ,    ,    ,      
fs.open("./src/test.txt","r+",function (err,fd) {
    if (err) {
        console.log(err)
    }
    console.log("      !")
    console.log("      ");
    //     ,       ,            
    fs.ftruncate(fd,10,function (err) {
        if (err) {
            console.log(err)
        }
        console.log("      !");
        console.log("      ");
        fs.read(fd,buffer,0,buffer.length,0,function (err,bytesRead) {
            if (err) {
                console.error(err)
            }
            console.log(bytesRead+"      ");
            if (bytesRead>0) {
                console.log(buffer.slice(0,bytesRead).toString())
            }
            //     
            fs.close(fd,function (err) {
                if (err) {
                    console.log(err)
                }
                console.log("    ")
            })
        })
    })
})
       ,           

4.4文書を閉じる具体的な使い方は、上の例に示すように
fs.close(fd,callback)
/**
 * fd,       fd
 * callback,    ,  err
 */
 

4.5ファイルに書き込む
// fs.write(fd,buffer,offset,length,position,callback);
/**
 * fd,   fs.open             
 * buffer,   Buffer  ,v8         
 * offset,   ,             ,      
 * length,   ,             
 * position,   ,        ;
 * callback(err, written, buffer),              ,written       ,buffer         
 */
ファイルのインスタンスを書き込み:
fs.open("./src/test.txt","r+",function (err,fd) {
    if (err) {
        console.error(err)
    }
    console.log("      ");
    console.log("      ");
    var buf = new Buffer("     ");
    fs.write(fd,buf,0,buf.length,0,function (err,written,buffer) {
        if (err) {
            console.error(err)
        }
        //         ,    ,utf8      
        console.log(written);
        //         text.txt      
        console.log(buffer.toString())
    })
    fs.close(fd,function (err) {
        if (err) {
            console.error(err)
        }
        console.log("      ")
    })
})

5.ファイル情報の取得
// fs.stat(filename,callback)
/**
 * filename,    ,         
 * callback,     err,   stats,           
 */
 
ファイル情報のインスタンスを取得:
fs.stat(__dirname+"/test.txt",function (err,stats) {
    if (err) {
        console.error(err)
    }
    console.log(stats)
})

6.フォルダの作成

// fs.mkdir(filname,callback)
/**
 * filename,    
 * callback,    err  
 */
 
 fs.mkdir(__dirname+"/test/",function (err) {
    if (err) {
        console.error(err)
    }
    console.log("       !")
})

7.フォルダの読み込み
// fs.readdir(filename,{options},callback)
/**
 * filename,    
 * options,    
 * callback,     err,     files,           
 */
 
フォルダの例を読み込みます.

//         test    ,        ,   index.js,index.html
fs.readdir(__dirname+"/test",function (err,files) {
    if (err) {
        console.error(err)
    }
    console.log("       !")
    console.log(files)
    files.forEach(function (value,index) {
        console.log(value+"---"+index)
    })
})

8.ファイルの削除
// fs.unlink(filename,callback)
/**
 * filename,    
 * callback,  err
 */

ファイルの削除例:

//     test         index.txt  ,         
fs.unlink(__dirname+"/test/index.txt",function (err) {
    if (err) {
        console.error(err)
    }
    console.log("    !")
})

9.フォルダの削除
fs.rmdir(fliename,callback);
/**
 * filename,    
 * callback,  err
 */
 
//      ,    
function cleanDir(filename) {
    //              ,  files  
    var files = fs.readdirSync(filename);
    //   files  ,  forEach 
    files.forEach((item) => {
        var stats = fs.statSync(filename+"/"+item);
        //             
        if (stats.isDirectory()) {
            //              
            cleanDir(filename+"/"+item)
        }else{
            //        ,     ,    
            fs.unlinkSync(filename+"/"+item);
            console.log("    "+filename+"/"+item+"  ")
        }
    })
}

//         ,    
function deleteDir(filename) {
    //          ,  files
    var files = fs.readdirSync(filename);
    //   files          ,     length
    if (files.length>0) {
        var tempFile = 0;
        files.forEach((item) => {
            tempFile++;
            deleteDir(filename+"/"+item);
        })
        //            ,       filename      ,       ,
        //      ,        
        if (tempFile==files.length) {
            fs.rmdirSync(filename)
            console.log("     "+filename+"  ")
        }
    }else{
        fs.rmdirSync(filename)
        console.log("     "+filename+"  ")
    }
}
cleanDir(__dirname + "/test");
deleteDir(__dirname + "/test");

基本的にNode.jsのファイルシステムで一番よく使われているアプリは大体一回触れました.