Persyaratannya adalah sebagai berikut:
Ada sekitar 40 m file di seluruh direktori, dan ada banyak file. Seiring berjalannya waktu, saya tidak ingat file mana string itu ada, jadi. Node.js yang kuat dan menyilaukan memulai debutnya:
Tidak ada perbedaan antara menginstal node.js di Windows dan menginstal perangkat lunak biasa. Setelah menginstal, buka pintasan ke Node.js, atau langsung CMD, Anda tahu.
Buat findString.js
var path = membutuhkan ("path"); var fs = membutuhkan ("fs"); var filepath = proses.argv [2]; var lookingForString = Process.argv [3]; RecursivereadFile (FilePath); FunctioneadFile (FileName) {if (! fs.existsync (fileNename))) (fileName) {if (! fs.existsync (fileNename))) return; if (isFile (fileName)) {check (fileName);} if (isDirectory (fileName)) {var file = fs.readdirsync (fileName); file.foreach (function, val) {var temp = path.join (fileName, val); ife (iSdirecory) {var temp = path.join (fileName, val); ife (iSdirectory) {var temp = path.join (fileName, val); ife (iSdirecory) {var Temp = Path. (isFile (temp)) periksa (temp);})}} periksa fungsi (nama file) {var data = readFile (fileName); var exc = regexp baru (lookingForString); if (exc.test (data)) console.log (filename);} function isDirectory (file) {filenexy (file) {if.); fs.statsync (nama file) .isdirectory ();} function isFile (fileName) {if (fs.existsync (fileName)) return fs.statsync (fileename) .file (} function readfile (nama file) {if (fs.existsync (filename))) readfile (fileName) {if (fs.existsync (fileNeName))) fs.readfilesync (nama file, "utf-8");}Dua Parameter: Parameter pertama adalah "nama folder" dan parameter kedua adalah "string yang Anda cari"
Seperti yang ditunjukkan pada gambar:
Cetak jalur file, selesaikan pekerjaan. Kecepatannya benar -benar sengit, membutakan mata. . . Jika Anda menggunakan pencarian teks lengkap Java, Anda akan sengsara ...
NodeJS mencari, membaca dan menulis file
(1), pemrosesan jalur
1. Pertama -tama, kita perlu memperhatikan normalisasi jalur file. NodeJS memberi kita modul jalur. Metode Normolize dapat membantu kita menormalkan jalur:
var path = membutuhkan ('path'); path.normalize ('/foo/bar/nor/faz/..'); ->/foo/bar/nor2. Tentu saja, ada juga jalur gabungan gabungan:
var path = membutuhkan ('path'); path.join ('/foo', 'bar', 'baz/asdf', 'quux', '..'); ->/foo/bar/baz/asdf3. Jalur
var path = membutuhkan ('path'); path.resolve ('/foo/bar', './baz'); ->/foo/bar/bazpath.resolve ('/foo/bar', '/tmp/file/'); ->/tmp/file4. Temukan jalur relatif antara dua jalur relatif
var path = membutuhkan ('path'); path.relative ('/data/orandea/test/aaa', '/data/orandea/IMP/BBB'); -> ../../ IMP/BBB5. Ekstrak jalan
var path = membutuhkan ('path'); path.dirname ('/foo/bar/baz/asdf/quux.txt'); ->/foo/bar/baz/asdf ============================================ Var path = membutuhkan ('path'); path.basename ('/foo/bar/Baz/asdf/ouux.htmlAnda bahkan dapat menghapus nama akhiran, cukup lewati parameter kedua dalam nama dasar, dan parameternya adalah nama akhiran, misalnya:
var path = membutuhkan ('path');
path.basename ('/foo/bar/baz/asdf/quux.html', '.html'); -> quux
Tentu saja, mungkin ada berbagai file yang berbeda di jalur file, dan tidak mungkin bagi kita untuk melakukan hardcode akhiran untuk mendapatkan hasil yang kita inginkan.
Jadi ada cara untuk mendapatkan nama akhiran untuk kami:
path.extName ('/a/b/index.html'); // => '.html'
path.extName ('/a/bc/index'); // => ''
path.extName ('/a/bc/.'); // => ''
path.extName ('/a/bc/d.'); // => '.'
(2), pemrosesan file
var fs = membutuhkan ('fs');
1. Tentukan apakah ada file
fs.exists (path, function (ada) {});
Antarmuka di atas tidak sinkron, jadi ada fungsi panggilan balik, yang dapat menangani berbagai operasi dalam panggilan balik. Jika Anda perlu menyinkronkan operasi, Anda dapat menggunakan metode berikut:
fs.existssync (path);
2. Baca Informasi Status File
fs.stat (path, function (err, stats) {if (err) {throw err;} console.log (stats);});Isi status output konsol kira -kira sebagai berikut:
{dev: 234881026, ino: 95028917, Mode: 33188, nlink: 1, uid: 0, gid: 0, rdev: 0, ukuran: 5086, blksize: 4096, blok: 0, ATIME: 18 Nov 2011 22:44:47 GMT, METIME: THU: THU: THU: THU: 0 8 NovemberPada saat yang sama, statistik juga memiliki beberapa metode, seperti:
stats.isfile (); stats.isdirectory (); stats.isblockdevice (); stats.ischaracterdevice (); stats.issymboliclink (); stats.isfifo (); stats.issocket () ;. baca dan tulis file fs.open ('/path/to/file', 'r', function (err, err, fd) {'/path/to/file', 'r', function (err, err, fd) {'/to/fire', 'r', function (err, err, fd) {'/to/fire', 'r', function (err, err, fd) {'/to/fire'Parameter kedua adalah jenis operasi:
R: Baca saja
r+: baca dan tulis
W: Tulis ulang file
W+: Tulis ulang file, buat jika file tidak ada
A: Baca dan tulis file, tambahkan di akhir file
a+: baca dan tulis file, buat jika file tidak ada
Berikut adalah contoh kecil dari membaca file:
var fs = membutuhkan ('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;Berikut adalah contoh kecil dari menulis file:
var fs = membutuhkan ('fs'); fs.open ('./ my_file.txt', 'a', fungsi dibuka (err, fd) {if (err) {throw err;} var writeBuffer = buffer baru ('halo, dunia!'), bufferposition = 0, bufferLength = writeBuffer.length, fileposisi = null; fs.write (fd -write (fd fd flongbuffer. function (err, tertulis) {if (err) {throw err;Untuk operasi membaca dan menulis, kita tidak boleh lupa untuk melakukan operasi yang dekat setelah semua operasi ini selesai, yaitu, tutup (); Berikut ini adalah metode yang dienkapsulasi, yang mencakup operasi pasca-penutupan file, yang lebih mudah digunakan:
var fs = membutuhkan ('fs'); Fungsi OpenAndWriteToSystemLog (writeBuffer, callback) {fs.open ('./ my_file', 'a', function (err, fd) {if (err) {return callback (err);} function notifyError (err) {fs.close (fd, function () {callback (err); writeBuffer.length, fileposisi = null; }); OpenAndWriteToSyStemLog (buffer baru ('Menulis string ini'), function (err) {if (err) {console.log ("Kesalahan saat membuka dan menulis:", err.message); return;} console.log ('semua dilakukan tanpa kesalahan');});