Los requisitos son los siguientes:
Hay alrededor de 40 m de archivos en todo el directorio, y hay innumerables archivos. A medida que pasa el tiempo, no recuerdo en qué archivo se encuentra la cadena, así que. El poderoso y cegador nodo.js debutó:
No hay diferencia entre la instalación de Node.js en Windows y la instalación de software ordinario. Después de instalar, abra el acceso directo a Node.js, o directamente CMD, ya sabes.
Crea FindString.js
var ruta = requirir ("ruta"); var fs = require ("fs"); var filepath = process.argv [2]; var lookforString = process.argv [3]; recursgeReadFile (filepath); función recursineReadFile (nombre de archivo) {if (! fs.existsync (filename)))) return; if (isFile (fileName)) {check (fileName);} if (isDirectory (fileName)) {var files = fs.ReadDirsync (fileName); files.foreach (function (val, key) {var temp = path.join (fileNe, val); if (isDirectory (temp)) recurseRadFile (temp); check (temp);})}} compate de función (nombre de archivo) {var data = readFile (filename); var exc = new REGEXP (LookforString); if (exc.test (data)) console.log (nombre de archivo);} function isDirectory (nombre de archivo) {if (fs.ExistsSyc (filename) de regreso fs.StatSync (nombre de archivo) .IsDirectory ();} function isFile (fileName) {if (fs.ExistSync (filename)) return fs.StatSync (FileName) .ISFILE ();} function readFile (fileName) {if (fs.existSync (filename)) fs.ReadFilesync (nombre de archivo, "UTF-8");}Dos parámetros: el primer parámetro es el "nombre de la carpeta" y el segundo parámetro es "la cadena que está buscando"
Como se muestra en la imagen:
Imprima la ruta del archivo, termine el trabajo. La velocidad es realmente feroz, cegando los ojos. . . Si usa la búsqueda de texto completo de Java, será miserable ...
NodeJs Búsqueda, lea y escribe archivos
(1), procesamiento de ruta
1. En primer lugar, debemos prestar atención a la normalización de las rutas de archivo. NodeJS nos proporciona el módulo de ruta. El método de normolización puede ayudarnos a normalizar la ruta:
var ruta = requirir ('ruta'); ruta.normalize ('/foo/bar/nor/faz/..'); ->/foo/bar/ni2. Por supuesto, también está el camino de fusión de unión:
var ruta = requirir ('ruta'); path.Join ('/foo', 'bar', 'baz/asdf', 'quux', '..'); ->/foo/bar/baz/asdf3. Camino
VAR PATH = require ('ruta'); rath.resolve ('/foo/bar', './baz'); ->/foo/bar/bazpath.resolve ('/foo/bar', '/tmp/file/'); ->/tmp/archivo4. Encuentra rutas relativas entre dos rutas relativas
var ruta = requirir ('ruta'); rath.relative ('/data/oranDea/test/aaa', '/data/oranDea/impl/bbb'); -> ../../ impl/bbb5. Extraer el camino
var ruta = requirir ('Path'); Path.Dirname ('/foo/bar/baz/asdf/quux.txt'); ->/foo/bar/baz/asdf =====================================================================================================================================================================--Incluso puede eliminar el nombre del sufijo, simplemente pase el segundo parámetro en el nombre de base, y el parámetro es el nombre del sufijo, por ejemplo:
ruta var = requerir ('ruta');
Path.Basename ('/foo/bar/baz/asdf/quux.html', '.html'); -> quux
Por supuesto, puede haber varios archivos diferentes en la ruta del archivo, y es imposible para nosotros codificar el sufijo para obtener los resultados que queremos.
Entonces hay una manera de obtener el nombre del sufijo:
path.extname ('/a/b/index.html'); // => '.html'
path.extname ('/a/bc/index'); // => ''
path.extname ('/a/bc/.'); // => ''
path.extname ('/a/bc/d.'); // => '.'
(2), procesamiento de archivos
var fs = require ('fs');
1. Determinar si el archivo existe
fs.exists (ruta, función (existe) {});
La interfaz anterior es asíncrona, por lo que hay funciones de devolución de llamada, que pueden manejar varias operaciones en la devolución de llamada. Si necesita sincronizar las operaciones, puede usar el siguiente método:
fs.existssync (ruta);
2. Lea la información de estado del archivo
fs.Stat (ruta, function (err, stats) {if (err) {throw err;} console.log (stats);});El contenido de los estados de salida de la consola es aproximadamente como sigue:
{ 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 }Al mismo tiempo, las estadísticas también tienen algunos métodos, como:
stats.Isfile (); stats.isDirectory (); stats.isBlockDevice (); stats.ischaracterDevice (); stats.issymbolicLink (); stats.isfifo (); stats.issocket ();
El segundo parámetro es el tipo de operación:
R: solo lea
R+: Leer y escribir
W: reescribir el archivo
w+: reescribe el archivo, crea si el archivo no existe
R: Leer y escribir archivos, agrégalos al final del archivo
A+: leer y escribir archivos, crearlos si el archivo no existe
Aquí hay un pequeño ejemplo de leer un archivo:
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) {throL Err;} console.log ('Just Read' + Readbytes + 'Bytes');Aquí hay un pequeño ejemplo de escribir un archivo:
var fs = require ('fs'); fs.open ('./ my_file.txt', 'a', function abierto (err, fd) {if (err) {throw err;} var writeBuffer = new Buffer ('Hello, World!'), BufferPosition = 0, BufferLength = WriteBuffer.length, filePosition = null; fs.write (fd, writeBuffer, bufferposition, bufferl longitud, bufferl longitud, bufferl longitud, bufferl longitud, bufferl longitud, bufferl longitud, bufferl longitud, bufferl longitud, bufferl longitud, bufferl longitud. function (err, escrito) {if (err) {throw err;Para las operaciones de lectura y escritura de archivos, no debemos olvidar realizar una operación cerrada después de que se completen todas estas operaciones, es decir, cerrar (); El siguiente es un método encapsulado, que incluye la operación posterior al cierre del archivo, que es conveniente de usar:
var fs = require ('fs'); función OpenAndWriteSystemlog (WriteBuffer, Callback) {fs.open ('./ my_file', 'a', function (err, fd) {if (err) {return Callback (err);} function notifyError () {fs.close (fd, function () {callback (err);};} var bufferOffSet = 0, bufferl WriteBuffer.length, filePosition = null; }); OpenAndWriteTosystemlog (new Buffer ('Writing This String'), function (err) {if (err) {console.log ("Error mientras se abre y escribe:", err.message); return;} console.log ('todo hecho sin errores');});