Node.js 파일 시스템


Node.js는 UNIX(POSIX) 표준과 유사한 파일 작업 API 세트를 제공합니다. Node의 가져오기 파일 시스템 모듈(fs)의 구문은 다음과 같습니다.

var fs = require("fs")

비동기 및 동기

Node.js 파일 시스템(fs 모듈) 모듈의 메서드에는 비동기 및 동기 버전이 있습니다. 파일 내용 읽기는 비동기식 fs.readFile() 및 동기식 fs.readFileSync()입니다.

비동기 메소드 함수의 마지막 매개변수는 콜백 함수이고, 콜백 함수의 첫 번째 매개변수에는 오류 정보(error)가 포함되어 있습니다.

동기화 방법에 비해 비동기식 방법은 성능이 더 뛰어나고 속도가 빠르며 차단이 없습니다.

Example

다음 내용으로 input.txt 파일을 생성합니다.

php中文网官网地址:www.php.cn
文件读取实例

다음 코드로 file.js 파일을 생성합니다.

var fs = require("fs");

// 异步读取
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data.toString());
});

// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());

console.log("程序执行完毕。");

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
同步读取: php中文网官网地址:www.php.cn
文件读取实例

程序执行完毕。
异步读取: php中文网官网地址:www.php.cn
文件读取实例

Next, let Node.js 파일 시스템 메소드를 자세히 살펴보겠습니다.


파일 열기

Syntax

다음은 비동기 모드에서 파일을 여는 구문 형식입니다.

fs.open(path, flags[, mode], callback)

Parameters

매개변수 사용 지침은 다음과 같습니다.

  • path - 파일 경로 .

  • flags - 파일 열기 동작. 구체적인 값은 아래를 참조하세요.

  • mode - 파일 모드(권한)를 설정합니다. 파일 생성을 위한 기본 권한은 0666(읽기, 쓰기 가능)입니다.

  • callback - callback(err, fd)과 같은 두 개의 매개변수가 있는 콜백 함수.

flags 매개변수는 다음 값일 수 있습니다.

Flag 설명
r 파일을 읽기 모드로 엽니다. 파일이 없으면 예외가 발생합니다.
r+파일을 읽기 및 쓰기 모드로 엽니다. 파일이 없으면 예외가 발생합니다.
rs 파일을 동기식으로 읽습니다.
rs+동기적인 방식으로 파일을 읽고 씁니다.
w파일을 쓰기 모드로 열고 파일이 없으면 생성하세요.
wx'w'와 같지만 파일 경로가 존재하면 파일 쓰기가 실패합니다.
w+파일을 읽기-쓰기 모드로 열고 파일이 없으면 새로 만듭니다.
wx+'w+'와 유사하지만 파일 경로가 존재하면 파일 읽기 및 쓰기가 실패합니다.
a파일을 추가 모드로 열고 파일이 없으면 생성하세요.
ax'a'와 유사하지만 파일 경로가 존재하면 파일 추가가 실패합니다.
a+파일을 읽기-추가 모드로 열고 파일이 없으면 새로 만듭니다.
ax+은 'a+'와 유사하지만 파일 경로가 존재하면 파일 읽기 및 추가가 실패합니다.

Example

다음으로 file.js 파일을 생성하고 input.txt 파일을 열어서 읽고 쓸 수 있습니다.

var fs = require("fs");

// 异步打开文件
console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("文件打开成功!");     
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备打开文件!
文件打开成功!

파일 가져오기 information

Syntax

다음은 비동기 모드를 통해 파일 정보를 얻기 위한 구문 형식입니다.

fs.stat(path, callback)

매개 변수

매개 변수 사용 지침은 다음과 같습니다.

  • path - 파일 경로입니다.

  • callback - (err, stats)와 같은 두 개의 매개변수가 있는 콜백 함수, stats는 fs.Stats 개체입니다.

fs.stat(path)가 실행된 후 stats 클래스의 인스턴스는 콜백 함수로 반환됩니다. 통계 클래스에 제공된 메소드를 통해 파일의 관련 속성을 확인할 수 있습니다. 예를 들어, 파일인지 확인하려면:

var fs = require('fs');

fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) {
    console.log(stats.isFile()); 		//true
})

stats 클래스의 메서드는 다음과 같습니다.

Method Description
stats.isFile()파일인 경우 true를 반환합니다. , 그렇지 않으면 false를 반환합니다.
stats.isDirectory()디렉토리이면 true를 반환하고 그렇지 않으면 false를 반환합니다.
stats.isBlockDevice()블록 장치인 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.
stats.isCharacterDevice()문자 장치인 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.
stats.isSymbolicLink()소프트 링크인 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.
stats.isFIFO()FIFO이면 true를 반환하고, 그렇지 않으면 false를 반환합니다. FIFO는 UNIX의 특수한 유형의 명령 파이프입니다.
stats.isSocket()소켓이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

Example

다음으로 file.js 파일을 생성합니다. 코드는 다음과 같습니다.

var fs = require("fs");

console.log("准备打开文件!");
fs.stat('input.txt', function (err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("读取文件信息成功!");
   
   // 检测文件类型
   console.log("是否为文件(isFile) ? " + stats.isFile());
   console.log("是否为目录(isDirectory) ? " + stats.isDirectory());    
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备打开文件!
{ dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 40333161,
  size: 61,
  blocks: 8,
  atime: Mon Sep 07 2015 17:43:55 GMT+0800 (CST),
  mtime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST),
  ctime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST) }
读取文件信息成功!
是否为文件(isFile) ? true
是否为目录(isDirectory) ? false

Write file

Syntax

다음은 구문 형식입니다. 비동기 모드에서 파일 쓰기:

fs.writeFile(filename, data[, options], callback)

파일이 존재하는 경우 이 방법으로 작성된 내용이 이전 파일 내용을 덮어씁니다.

Parameters

매개변수 사용 지침은 다음과 같습니다.

  • path - 파일 경로.

  • data - 파일에 기록할 데이터로, 문자열(문자열) 또는 버퍼(스트림) 개체일 수 있습니다.

  • options - 이 매개변수는 {인코딩, 모드, 플래그}를 포함하는 개체입니다. 기본 인코딩은 utf8, 모드는 0666, 플래그는 'w'

  • callback - 콜백 함수에는 오류 정보 매개변수(err)만 포함되며 쓰기 실패 시 반환됩니다.

Example

다음으로 file.js 파일을 생성합니다. 코드는 다음과 같습니다.

var fs = require("fs");

console.log("准备写入文件");
fs.writeFile('input.txt', '我是通过写入的文件内容!',  function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("数据写入成功!");
   console.log("--------我是分割线-------------")
   console.log("读取写入的数据!");
   fs.readFile('input.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("异步读取文件数据: " + data.toString());
   });
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备写入文件
数据写入成功!
--------我是分割线-------------
读取写入的数据!
异步读取文件数据: 我是通过写入的文件内容

파일 읽기

Syntax

다음 비동기 모드에서 파일을 읽고 있습니다. 구문 형식:

fs.read(fd, buffer, offset, length, position, callback)

이 방법은 파일 설명자를 사용하여 파일을 읽습니다.

Parameters

매개변수 사용 지침은 다음과 같습니다.

  • fd - fs.open() 메서드에서 반환된 파일 설명자입니다.

  • buffer - 데이터가 기록되는 버퍼입니다.

  • offset - 버퍼 쓰기에 대한 쓰기 오프셋입니다.

  • length - 파일에서 읽을 바이트 수입니다.

  • position - 파일 읽기 시작 위치입니다. position 값이 null이면 현재 파일 포인터 위치부터 읽습니다.

  • callback - 콜백 함수에는 err, bytesRead 및 buffer의 세 가지 매개변수가 있습니다. err은 오류 메시지이고, bytesRead는 읽은 바이트 수를 나타내며, buffer는 버퍼 객체입니다.

Example

input.txt 파일 내용은 다음과 같습니다.

php中文网官网地址:www.php.cn

다음으로 file.js 파일을 생성합니다. 코드는 다음과 같습니다.

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开已存在的文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("准备读取文件:");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + "  字节被读取");
      
      // 仅输出读取的字节
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备打开已存在的文件!
文件打开成功!
准备读取文件:
42  字节被读取
php中文网官网地址:www.php.cn

파일 닫기

Syntax

다음은 비동기 모드에서 파일을 닫는 구문 형식입니다.

fs.close(fd, callback)

이 방법은 파일 설명자를 사용하여 파일을 읽습니다.

Parameters

매개변수 사용 지침은 다음과 같습니다.

  • fd - fs.open() 메서드에서 반환된 파일 설명자입니다.

  • callback - 콜백 함수, 매개변수 없음.

Example

input.txt 파일 내용은 다음과 같습니다.

php中文网官网地址:www.php.cn

다음으로 file.js 파일을 생성합니다. 코드는 다음과 같습니다.

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("准备读取文件!");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }

      // 仅输出读取的字节
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }

      // 关闭文件
      fs.close(fd, function(err){
         if (err){
            console.log(err);
         } 
         console.log("文件关闭成功");
      });
   });
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备打开文件!
文件打开成功!
准备读取文件!
php中文网官网地址:www.php.cn
文件关闭成功

Intercept the file

Syntax

다음은 비동기 모드에서 파일을 가로채기 위한 구문 형식입니다.

fs.ftruncate(fd, len, callback)

이 방법은 파일 설명자를 사용하여 파일을 읽습니다.

Parameters

매개변수 사용 지침은 다음과 같습니다.

  • fd - fs.open() 메서드에서 반환된 파일 설명자입니다.

  • len - 파일 콘텐츠를 가로채는 길이입니다.

  • callback - 콜백 함수, 매개변수 없음.

Example

input.txt 파일 내용은 다음과 같습니다.

site:www.php.cn

다음으로 file.js 파일을 생성합니다. 코드는 다음과 같습니다.

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("截取10字节后的文件内容。");
   
   // 截取文件
   fs.ftruncate(fd, 10, function(err){
      if (err){
         console.log(err);
      } 
      console.log("文件截取成功。");
      console.log("读取相同的文件"); 
      fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
         if (err){
            console.log(err);
         }

         // 仅输出读取的字节
         if(bytes > 0){
            console.log(buf.slice(0, bytes).toString());
         }

         // 关闭文件
         fs.close(fd, function(err){
            if (err){
               console.log(err);
            } 
            console.log("文件关闭成功!");
         });
      });
   });
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备打开文件!
文件打开成功!
截取10字节后的文件内容。
文件截取成功。
读取相同的文件
site:www.r
文件关闭成功

파일 삭제

Syntax

파일 삭제 구문 형식은 다음과 같습니다.

fs.unlink(path, callback)

매개변수

매개변수 사용 지침은 다음과 같습니다.

  • path - 파일 경로.

  • callback - 콜백 함수, 매개변수 없음.

Example

input.txt 파일 내용은 다음과 같습니다.

site:www.php.cn

다음으로 file.js 파일을 생성합니다. 코드는 다음과 같습니다.

var fs = require("fs");

console.log("准备删除文件!");
fs.unlink('input.txt', function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("文件删除成功!");
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备删除文件!
文件删除成功!

Let's input.txt 파일을 다시 확인해 보니 더 이상 존재하지 않는 것으로 나타났습니다.


디렉터리 생성

구문

다음은 디렉터리 생성을 위한 구문 형식입니다.

fs.mkdir(path[, mode], callback)

매개변수

매개변수 사용 지침은 다음과 같습니다.

  • path - 파일 경로.

  • mode - 디렉터리 권한을 설정합니다. 기본값은 0777입니다.

  • callback - 콜백 함수, 매개변수 없음.

예제

다음으로 file.js 파일을 생성합니다. 코드는 다음과 같습니다.

var fs = require("fs");

console.log("创建目录 /tmp/test/");
fs.mkdir("/tmp/test/",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("目录创建成功。");
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
创建目录 /tmp/test/
目录创建成功。

디렉토리 읽기

Syntax

다음 디렉토리를 읽기 위한 구문 형식입니다.

fs.readdir(path, callback)

매개변수

매개변수 사용 지침은 다음과 같습니다.

  • path - 파일 경로.

  • callback - 콜백 함수는 err, files 두 개의 매개변수를 사용합니다. err은 오류 메시지이고 files는 디렉터리의 파일 배열 목록입니다.

Example

다음으로 file.js 파일을 생성하는데 코드는 다음과 같습니다.

var fs = require("fs");

console.log("查看 /tmp 目录");
fs.readdir("/tmp/",function(err, files){
   if (err) {
       return console.error(err);
   }
   files.forEach( function (file){
       console.log( file );
   });
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
查看 /tmp 目录
input.out
output.out
test
test.txt

디렉토리 삭제

Syntax

다음은 다음과 같습니다. 디렉토리 삭제 구문 형식:

fs.rmdir(path, callback)

parameter

매개변수 사용 지침은 다음과 같습니다.

  • path - 파일 경로.

  • callback - 콜백 함수, 매개변수 없음.

예제

다음으로 file.js 파일을 생성하는데, 코드는 다음과 같습니다.

var fs = require("fs");

console.log("准备删除目录 /tmp/test");
fs.rmdir("/tmp/test",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("读取 /tmp 目录");
   fs.readdir("/tmp/",function(err, files){
      if (err) {
          return console.error(err);
      }
      files.forEach( function (file){
          console.log( file );
      });
   });
});

위 코드의 실행 결과는 다음과 같습니다.

$ node file.js 
准备删除目录 /tmp/test
input.out
output.out
test
test.txt
读取 /tmp 目录
……

파일 모듈 메소드 참조 매뉴얼

다음은 Node.js 파일 모듈과 동일합니다. 메소드 목록:

19fs.lstat(path, callback)20fs.fstat(fd, callback)21fs.statSync(path)22fs.lstatSync(path)23fs.fstatSync(fd)26272829303134353637383940414243444546
일련번호방법 및 설명
1fs.rename(oldPath, newPath, callback)
비동기 이름 바꾸기()에는 매개변수가 없지만 예외가 발생할 수 있습니다.
2fs.ftruncate(fd, len, callback)
비동기 ftruncate()에는 매개변수가 없지만 예외가 발생할 수 있습니다. 매개변수는 없지만 예외가 발생할 수 있습니다.
5fs.truncateSync(경로, len)
동기 자르기()
6fs.chown(경로, uid, gid, 콜백)
비동기 chown().callback 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
7fs.chownSync(path, uid, gid)
synchronous chown()
8fs.fchown(fd, uid, gid, callback)
asynchronous fchown() .콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
9fs.fchownSync(fd, uid, gid)
synchronous fchown()
10fs.lchown(path, uid, gid, callback)
asynchronous lchown( ) .콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
11fs.lchownSync(경로, uid, gid)
동기 lchown()
12fs.chmod(경로, 모드, 콜백)
비동기 chmod().callback 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
13fs.chmodSync(경로, 모드)
동기 chmod().
14fs.fchmod(fd, 모드, 콜백)
비동기 fchmod().콜백 함수 매개변수를 사용하지 않지만 예외가 발생할 수 있습니다.
15fs.fchmodSync(fd, 모드)
동기 fchmod().
16fs.lchmod(경로, 모드, 콜백)
비동기 lchmod().콜백 함수 매개변수를 사용하지 않지만 예외가 발생할 수 있습니다. Mac OS X에서만 사용할 수 있습니다.
17fs.lchmodSync(경로, 모드)()에는 err, stats라는 두 개의 매개변수가 있으며 stats는 fs.Stats 개체입니다.
asynchronous lstat()에는 err, stats라는 두 개의 매개변수가 있으며 stats는 fs.Stats 개체입니다.
Asynchronous fstat()에는 err, stats라는 두 개의 매개변수가 있으며 stats는 fs.Stats 개체입니다.
Synchronize stat().
lstat()을 동기화합니다. fs.Stats의 인스턴스를 반환합니다.
동기식 fstat(). fs.Stats의 인스턴스를 반환합니다.
24fs.link(srcpath, dstpath, callback)
Asynchronous link() 콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
25s.fs.linksync (srcpath, dstpath) synchronous link ().
fs.symlink (srcpath, dstpath [, type], 콜백) asynchronous symlink ( ) 콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다. 유형 매개변수는 'dir', 'file' 또는 'junction'(기본값은 'file')으로 설정할 수 있습니다.
fs.symlinkSync(srcpath, dstpath[, type])동기성 심볼릭 링크().
fs.readlink(경로, 콜백)비동기 읽기 링크(). 콜백 함수에는 err 및 linkString이라는 두 개의 매개변수가 있습니다.
fs.realpath(path[,cache], callback)asynchronous realpath()에는 err라는 두 개의 매개변수가 있습니다.
fs.realpathSync(경로[, 캐시])realpath()를 동기화합니다. 절대 경로를 반환합니다.
fs.unlink(path, callback)Asynchronous unlink() 콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다. 콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
fs.rmdirSync(경로)동기 rmdir().
fs.mkdir(경로[, 모드], 콜백)S 비동기 mkdir(2). 콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다. 모드 기본값은 0777입니다.
fs.mkdirSync(path[, mode])synchronous mkdir().
fs.readdir(path, callback)asynchronous readdir (3) 디렉토리의 내용을 읽습니다.
fs.readdirSync(path) 동기식 readdir()을 반환합니다.
fs.close(fd, callback)Asynchronous close() 콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
fs.closeSync(fd)동기화 close().
fs.open(path, flags[, mode], callback)파일을 비동기적으로 엽니다.
fs.openSync(경로, 플래그[, 모드])fs.open()의 동기화 버전.
fs.utimes(경로, atime, mtime, 콜백 )
fs.utimesSync(path, atime, mtime)파일 타임스탬프를 수정하면 파일이 지정된 파일 경로를 전달합니다.
fs.futimes(fd, atime, mtime, 콜백)
fs.futimesSync(fd, atime, mtime)파일 설명자로 지정된 파일 타임스탬프를 수정합니다.
47fs.fsync(fd, callback)
Asynchronous fsync 콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.
48fs.fsyncSync(fd)
Sync fsync.
49fs.write(fd, buffer, offset, length[, position], callback)
은 내용을 버퍼링합니다. 파일 설명자가 지정한 파일에 기록됩니다.
50fs.write(fd, data[, position[, 인코딩]], callback)
파일 설명자 fd를 통해 파일 내용을 씁니다.
51fs.writeSync(fd, buffer, offset, length[, position])
fs.write()의 동기화된 버전입니다.
52fs.writeSync(fd, data[, position[, 인코딩]])
fs.write()의 동기화된 버전.
53fs.read(fd, buffer , 오프셋, 길이, 위치, 콜백)
파일 설명자 fd를 통해 파일 내용을 읽습니다.
54fs.readSync(fd, buffer, offset, length, position)
fs.read.
55fs.readFile(filename[, options], callback )
파일 콘텐츠를 비동기적으로 읽습니다.
56fs.readFileSync(filename[, options])<br fs.readfile.<="" td="">
57fs의 동기화된 버전 .writeFile(filename, data[, options], callback)
파일 내용을 비동기적으로 씁니다.
58fs.writeFileSync(filename, data[, options])
fs.writeFile의 동기화된 버전입니다.
59fs.appendFile(filename, data[, options], callback)
파일 콘텐츠를 비동기적으로 추가합니다.
60fs.appendFileSync(파일 이름, 데이터[, 옵션])
fs.appendFile.
61fs.watchFile(파일 이름[, 옵션], 리스너)의 동기화 버전
파일 수정 사항을 확인하세요.
62fs.unwatchFile(filename[,listener])
파일 이름 수정 보기를 중지하세요.
63fs.watch(filename[, options][,listener])
파일 이름 수정 보기, 파일 이름은 파일 또는 디렉터리일 수 있습니다. fs.FSWatcher 객체를 반환합니다.
64fs.exists(path, callback)
주어진 경로가 존재하는지 확인하세요.
65fs.existsSync(path)
fs.exists.
66fs.access(path[, mode], callback)
에 대한 사용자 권한 테스트 지정된 경로 .
67fs.accessSync(path[, mode])
fs.access의 동기화된 버전입니다.
68fs.createReadStream(path[, options])
ReadStream 개체를 반환합니다.
69fs.createWriteStream(경로[, 옵션])
WriteStream 객체를 반환합니다.
70fs.symlink(srcpath, dstpath[, type], callback)
콜백 함수에는 매개변수가 없지만 예외가 발생할 수 있습니다.

자세한 내용은 공식 웹사이트 파일 모듈 설명(파일 시스템)을 확인하세요.