요구 사항은 다음과 같습니다.
전체 디렉토리에는 약 40m의 파일이 있으며 수많은 파일이 있습니다. 시간이 지남에 따라 문자열이 어떤 파일에 있는지 기억할 수 없습니다. 강력하고 눈부신 노드 .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); 함수 recursevereadfile (filename) {if (! existsSync (filename)) if (isfile (filename)) {check (filename);} if (isdirectory (filename)) {var files = fs. readdirsync (filename); files.foreach (val, key) {var temp = wath.join (filename, val); if (temp)); if (temp)); check (temp);})}} 함수 check (filename) {var data = readfile (filename); var exc = new regexp (filename);} 함수 isdirectory (filename) {if (fs.essync (filenistsync (filenasm)) reto fs.statsync (filename) .isdirectory ();} 함수 isfile (filename) {if (fs.existssync (filename)) return fs.statsync (filename) .isfile ();} function readfile (filename) {if (fs.ExistsSync (filename)) readfilesync (filename); ");");두 가지 매개 변수 : 첫 번째 매개 변수는 "폴더 이름"이고 두 번째 매개 변수는 "원하는 문자열"입니다.
그림과 같이 :
파일 경로를 인쇄하고 작업을 완료하십시오. 속도는 정말 치열하여 눈을 맹목적입니다. . . Java 전문 검색을 사용하면 비참해질 것입니다 ...
nodejs 검색, 읽기 및 쓰기 파일
(1), 경로 처리
1. 우선, 우리는 파일 경로의 정규화에주의를 기울여야합니다. nodejs는 경로 모듈을 제공합니다. Normolize 방법은 경로를 정상화하는 데 도움이 될 수 있습니다.
var path = require ( 'path'); path.normanize ( '/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/bazpath.resolve ( '/foo/bar', '/tmp/file/'); ->/tmp/파일
4. 두 상대 경로 사이에서 상대 경로를 찾으십시오
var path = require ( 'path'); path.relative ( '/data/orandea/test/aaa', '/data/orandea/empl/bbb'); -> ../../ empr/bbb
5. 경로를 추출하십시오
var path = require ( 'path'); path.dirname ( '/foo/bar/baz/asdf/quux.txt'); ->/foo/bar/baz/asdf =========================================== Var Path = 요구 ( 'Path'); Path.basename ( '/foo/bar/baz/asdf/quux.html') -> quux.html
접미사 이름을 제거하고베이스 이름에서 두 번째 매개 변수를 전달할 수 있으며 매개 변수는 접미사 이름입니다.
var path = 요구 ( '경로');
path.basename ( '/foo/bar/baz/asdf/quux.html', '.html'); -> quux
물론 파일 경로에는 다양한 파일이있을 수 있으며, 우리가 원하는 결과를 얻기 위해 접미사를 하드 코딩하는 것은 불가능합니다.
따라서 우리에게 접미사 이름을 얻는 방법이 있습니다.
path.extname ( '/a/b/index.html'); // => '.html'
path.extname ( '/a/bc/index'); // => ''
PATH.EXTNAME ( '/a/bc/.'); // => ''
PATH.EXTNAME ( '/a/bc/d.'); // => '.'
(2), 파일 처리
var fs = 요구 ( 'fs');
1. 파일이 존재하는지 확인하십시오
fs.exists (경로, 함수 (Exists) {});
위의 인터페이스는 비동기식이므로 콜백 기능이있어 콜백에서 다양한 작업을 처리 할 수 있습니다. 작업을 동기화 해야하는 경우 다음 방법을 사용할 수 있습니다.
fs.existssync (path);
2. 파일 상태 정보를 읽습니다
fs.stat (Path, function (err, stats) {if (err) {Throw err;} console.log (stats);});콘솔 출력 상태의 내용은 다음과 같습니다.
{dev : 23481026, ino : 95028917, 모드 : 33188, nlink : 1, uid : 0, gid : 0, rdev : 0, size : 5086, blksize : 4096, blocks : 0, atime : fri, 18 11 월 22:44:47 gmt, mtt} 08 SEP 2011 23:044 gmt}동시에 통계에는 다음과 같은 몇 가지 방법도 있습니다.
stats.isfile (); stats.isdirectory (); stats.isblockdevice (); stats.ischaracterdevice (); stats.issymboliclink (); stats.isfo (); stats.issocket ();
두 번째 매개 변수는 작동 유형입니다.
R : 읽기 전용
R+: 읽고 쓰십시오
W : 파일을 다시 작성하십시오
w+: 파일을 다시 작성하고 파일이 존재하지 않으면 작성하십시오.
A : 파일을 읽고 쓰고 파일 끝에 추가하십시오.
a+: 파일을 읽고 쓰고 파일이 존재하지 않으면 작성하십시오.
다음은 파일을 읽는 작은 예입니다.
var fs = 요구 ( 'fs'); fs.open ( './ noderead.html', 'r', 함수 열기 (err, fd) {if (err) {trash err} var readbuffer = new buffer (1024), bufferoffset = 0, bufferlength = readbuffer.length, fileposition = 100; fd, readbuffer, bufferfort, bufferlength, bufferforture, bufferforts, bufferforts readBytes) {if (err) {throw read '}' + readbytes + 'bytes'{console.log (readbuffer.slice);다음은 파일 작성의 작은 예입니다.
var fs = 요구 ( 'fs'); fs.open ( './ my_file.txt', 'a', 함수 열기 (err, fd) {if (err) {trash err. 작성) {if (err) {Throw err} console.log ( ' + writed +'bytes ');파일 읽기 및 쓰기 작업의 경우 이러한 모든 작업이 완료된 후에는 근접 작업을 수행하는 것을 잊지 말아야합니다. 즉, Close (); 다음은 캡슐화 된 방법으로, 파일의 포스트 포스트 작업을 포함하여 사용하기 편리합니다.
var fs = 요구 ( 'fs'); 함수 OpenAndWritEtoSystemLog (WriteBuffer, Callback) {fs.open ( './ my_file', 'a', function (err, fd) {if (err) {retur) {return Callback (err);} 함수 notifyError (err) {fs.close (fd, function () {Callback (err)); writeBuffer.length, F.Write (FD, WriteBuffer, BufferOffset, FilePosition, Function) {if (err) {return notifyError (err);} fs.close; }); OpenAndWritetOsyStemLog (새 버퍼 ( '이 문자열 쓰기'), function (err) {if (err) {console.log ( "오류가 열리고 쓰는 동안 오류 :", err.message); return;} console.log ( '모두 오류없이 완료');