ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js の文字列検索 function_node.js の簡単な分析

Node.js の文字列検索 function_node.js の簡単な分析

WBOY
WBOYオリジナル
2016-05-16 16:37:471951ブラウズ

要件は次のとおりです:

ディレクトリ全体で40Mほどあり、ファイルも無数にあります。久しぶりなのでどのファイルにその文字列が入っているか思い出せません。強力で目もくらむような Node.js がデビューします:

Windows に Node.js をインストールすることは、通常のソフトウェアをインストールすることと何ら変わりません。インストール後に Node.js のショートカットを開くか、直接 cmd を実行します。

findString.js を作成する

var path = require("path");

var fs = require("fs");


var filePath = process.argv[2];

var lookingForString = process.argv[3];

recursiveReadFile(filePath);


function recursiveReadFile(fileName){

if(!fs.existsSync(fileName)) return;

if(isFile(fileName)){

check(fileName);

}

if(isDirectory(fileName)){

var files = fs.readdirSync(fileName);

files.forEach(function(val,key){

var temp = path.join(fileName,val);

if(isDirectory(temp)) recursiveReadFile(temp);

if (isFile(temp)) check(temp);

})

}

}

function check(fileName){

var data = readFile(fileName);

var exc = new RegExp(lookingForString);

if(exc.test(data))

console.log(fileName);


}

function isDirectory(fileName){

if(fs.existsSync(fileName)) return fs.statSync(fileName).isDirectory();

}

function isFile(fileName){

if(fs.existsSync(fileName)) return fs.statSync(fileName).isFile();

}

function readFile(fileName){

if(fs.existsSync(fileName)) return fs.readFileSync(fileName,"utf-8");

}

2 つのパラメータ: 最初のパラメータは「フォルダ名」、2 番目のパラメータは「探している文字列」です

写真:

Node.js の文字列検索 function_node.js の簡単な分析

ファイル パスを出力して完了です。それでは終わりです。そのスピードは本当に凄まじく、目もくらむほどです。 。 。 Javaの全文検索を使うと大変なことになります…

Nodejs の検索、ファイルの読み取りと書き込み

(1)、パス処理

1. まず、ファイル パスの正規化に注意する必要があります。nodejs は、パスの正規化に役立つ Path モジュールを提供します。

var path = require('path');

path.normalize('/foo/bar/nor/faz/..'); -> /foo/bar/nor
2. もちろん、結合マージ パスもあります:

var path = require('path');

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); ->/foo/bar/baz/asdf
3. パスを解析します

var path = require('path');

path.resolve('/foo/bar', './baz'); ->/foo/bar/baz

path.resolve('/foo/bar', '/tmp/file/'); ->/tmp/file
4. 2 つの相対パス間の相対パスを検索します

var path = require('path');

path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); ->../../impl/bbb
5. 抽出パス

var path = require('path');

path.dirname('/foo/bar/baz/asdf/quux.txt'); ->/foo/bar/baz/asdf

=================

var path = require('path');

path.basename('/foo/bar/baz/asdf/quux.html') ->quux.html

サフィックス名を削除することもできます。basename の 2 番目のパラメータを渡すだけです。パラメータはサフィックス名です。例:

var path = require('path');

path.basename('/foo/bar/baz/asdf/quux.html', '.html');

もちろん、ファイル パスにはさまざまなファイルが存在する可能性があり、必要な結果を得るためにサフィックスをハードコーディングすることは不可能です。

サフィックス名を取得するのに役立つメソッドがあります:

path.extname('/a/b/index.html') // =>

path.extname('/a/b.c/index') // =>

path.extname('/a/b.c/.') // =>

path.extname('/a/b.c/d.') // =>

(2)、ファイル処理

var fs = require('fs');

1. ファイルが存在するかどうかを確認します

fs.exists(path, function(exists) {});

上記のインターフェイスは非同期で動作するため、さまざまな操作を処理できるコールバック関数があり、同期操作が必要な場合は、次のメソッドを使用できます。

fs.existsSync(パス);

2. ファイルステータス情報を読み取る

コンソール出力状態の内容はおおよそ次のとおりです:

fs.stat(path, function(err, stats) {
  if (err) { throw err;}
  console.log(stats);
});
同時に、統計には次のようなメソッドもあります。

 { dev: 234881026,
 ino: 95028917,
 mode: 33188,
 nlink: 1,
 uid: 0,
 gid: 0,
 rdev: 0,
 size: 5086,
 blksize: 4096,
blocks: 0,
atime: Fri, 18 Nov 2011 22:44:47 GMT,
mtime: Thu, 08 Sep 2011 23:50:04 GMT,
ctime: Thu, 08 Sep 2011 23:50:04 GMT }


2 番目のパラメータは操作タイプです:

r : 読み取り専用
stats.isFile();
stats.isDirectory();
stats.isBlockDevice();
stats.isCharacterDevice();
stats.isSymbolicLink();
stats.isFifo();
stats.isSocket();
.读写文件

fs.open('/path/to/file', 'r', function(err, fd) {

// todo

});
r : 読み取りと書き込み

w : ファイルを書き換えます

w : ファイルを書き換えるか、ファイルが存在しない場合は作成します

a: ファイルの読み取りと書き込み。ファイルの最後に

を追加します。

a: ファイルの読み取りと書き込み、ファイルが存在しない場合は作成

次に、ファイルの読み取りの簡単な例を示します:

以下は、ファイルの書き込みの簡単な例です:

 var fs = require('fs');
 fs.open('./nodeRead.html', 'r', function opened(err, fd) {
 if (err) { throw err }
   var readBuffer = new Buffer(1024),
   bufferOffset = 0,
   bufferLength = readBuffer.length,
   filePosition = 100;
   fs.read(fd,
     readBuffer,
    bufferOffset,
    bufferLength,
    filePosition,
    function read(err, readBytes) {
    if (err) { throw err; }
    console.log('just read ' + readBytes + ' bytes');
    if (readBytes > 0) {
      console.log(readBuffer.slice(0, readBytes));
    }
  });
});
ファイルの読み取りおよび書き込み操作の場合、これらの操作が完了した後に閉じる操作、つまり close() を実行することを忘れないでください。次に示すのは、後でファイルを閉じる操作を含むカプセル化されたメソッドです。使うと便利です:


 var fs = require('fs');
 fs.open('./my_file.txt', 'a', function opened(err, fd) {
   if (err) { throw err; }
   var writeBuffer = new Buffer('hello, world!'),
   bufferPosition = 0,
   bufferLength = writeBuffer.length, filePosition = null;
   fs.write( fd,
     writeBuffer,
     bufferPosition,
    bufferLength,
    filePosition,
    function(err, written) {
      if (err) { throw err; }
      console.log('wrote ' + written + ' bytes');
  });
});
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。