요구사항은 다음과 같습니다.
전체 디렉터리에 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"); }
두 개의 매개변수: 첫 번째 매개변수는 "폴더 이름"이고 두 번째 매개변수는 "찾고 있는 문자열"입니다.
사진:
파일 경로를 인쇄하고 완료하고 하루를 보내세요. 속도가 정말 맹렬하고 눈이 부시네요. . . 자바 전문검색을 이용하시면 곤란합니다...
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. 두 상대 경로 사이의 상대 경로 찾기
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의 두 번째 매개변수를 전달하면 됩니다. 매개변수는 접미사 이름입니다. 예:
var 경로 = require('path');
path.basename('/foo/bar/baz/asdf/quux.html', '.html') ->quux
물론 파일 경로에 다양한 파일이 있을 수 있고, 원하는 결과를 얻기 위해 접미사를 하드코딩하는 것은 불가능합니다.
접미사 이름을 얻는 데 도움이 되는 방법이 있습니다.
path.extname('/a/b/index.html') // => '.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(경로, 함수(존재) {});
위 인터페이스는 비동기식으로 작동하므로 다양한 작업을 처리할 수 있는 콜백 함수가 있습니다. 동기식 작업이 필요한 경우 다음 방법을 사용할 수 있습니다.
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 }동시에 통계에는 다음과 같은 몇 가지 방법도 있습니다.
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 : 읽기 전용
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)); } }); });다음은 파일 작성의 간단한 예입니다.
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'); }); });
var fs = require('fs'); function 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); }); } var bufferOffset = 0, bufferLength = writeBuffer.length, filePosition = null; fs.write( fd, writeBuffer, bufferOffset, bufferLength, filePosition,function(err, written) { if (err) { return notifyError(err); } fs.close(fd, function() { callback(err); }); }); }); } openAndWriteToSystemLog(new Buffer('writing this string'),function(err) { if (err) { console.log("error while opening and writing:", err.message); return; } console.log('All done with no errors'); });