Nodejs에서 모듈 fs 파일 시스템을 사용하는 방법
개요
fde의 fs 문서는 촘촘한api가 매우 많은데 파일 시스템에 대한 조작을 전면적으로 지원하기 때문이다.문서가 잘 구성되어 있고 조작은 기본적으로 파일 조작, 디렉터리 조작, 파일 정보, 흐름이라는 큰 부분으로 나뉘며 프로그래밍 방식도 동기화, 비동기화와 Promise를 지원한다.
본고는 몇 개의 문서에서 상세하게 묘사되지 않은 문제를 기록하여 fs 문서의 사고방식을 더욱 잘 연결할 수 있다.
파일 설명자
파일 설명자는 음수가 아닌 정수입니다.이것은 색인 값으로 운영체제가 그것에 따라 대응하는 파일을 찾을 수 있다.
fs의 많은 밑바닥api에서 파일 설명자를 사용해야 합니다.문서에서 설명 문자는 항상 fd로 대표됩니다.예: fs.read(fd, buffer, offset, length, position, callback).이api와 대응하는 것은: fs.readFile(path[, options], callback).
운영체제가 파일 설명자의 수량에 제한이 있기 때문에 파일 작업이 끝난 후close를 잊지 마십시오:
const fs = require("fs");
fs.open("./db.json", "r", (err, fd) => {
if (err) throw err;
// ...
// ,
fs.close(fd, err => {
if (err) throw err;
});
});
동기식, 비동기식 및 Promise
모든 파일 시스템의api는 동기화와 비동기화 두 가지 형식이 있습니다.
동기식
동기화api를 사용하는 것을 추천하지 않습니다. 라인이 막힙니다.
try {
const buf = fs.readFileSync("./package.json");
console.log(buf.toString("utf8"));
} catch (error) {
console.log(error.message);
}
비동기식
비동기식으로 쓰면 회조 지옥에 들어가기 쉽다.
fs.readFile("./package.json", (err, data) => {
if (err) throw err;
console.log(data.toString("utf8"));
});
(추천) Promise 쓰기
node v12 이전에 promise 패키지를 사용해야 합니다.
function readFilePromise(path, encoding = "utf8") {
const promise = new Promise((resolve, reject) => {
fs.readFile(path, (err, data) => {
if (err) return reject(err);
return resolve(data.toString(encoding));
});
});
return promise;
}
readFilePromise("./package.json").then(res => console.log(res));
node v12에서 fs Promiseapi를 도입했습니다.리셋 대신 Promise 객체를 반환합니다.API는 require('fs')를 통해 사용할 수 있습니다.promises 접근.이렇게 되면 개발 원가가 더욱 낮아진다.
const fsPromises = require("fs").promises;
fsPromises
.readFile("./package.json", {
encoding: "utf8",
flag: "r"
})
.then(console.log)
.catch(console.error);
디렉터리와 디렉터리 항목
fs.Dir 클래스: 파일 디렉토리와 관련된 작업을 패키지화합니다.
fs.Dirent 클래스: 디렉터리 항목에 대한 작업이 봉인되었습니다.예를 들어 장치 유형(문자, 블록, FIFO 등)을 판단합니다.
코드를 통해 이러한 관계를 보여줍니다.
const fsPromises = require("fs").promises;
async function main() {
const dir = await fsPromises.opendir(".");
let dirent = null;
while ((dirent = await dir.read()) !== null) {
console.log(dirent.name);
}
}
main();
파일 정보
fs.Stats 클래스: 파일 정보와 관련된 작업을 봉인했습니다.그것은 fs에 있다.stat () 의 콜백 함수에서 반환됩니다.
fs.stat("./package.json", (err, stats) => {
if (err) throw err;
console.log(stats);
});
파일이 있는지 확인하는 방법:ReadStream 및 WriteStream
nodejs에서stream은 매우 중요한 라이브러리입니다.많은 라이브러리의api는stream을 기반으로 봉인되어 있습니다.예를 들어, 다음 fs의 ReadStream 및 WriteStream 을 참조하십시오.
fs 자체는readFile과writeFile를 제공합니다. 그 대가는 성능에 문제가 있어서 내용을 한 번에 모두 메모리에 불러오는 것입니다.그러나 몇 GB의 큰 파일에 대해서는 분명히 문제가 있을 것이다.
그러면 큰 파일에 대한 해결 방안은 자연히 조금씩 읽는 것이다.이것은stream이 필요합니다.readStream의 경우 코드는 다음과 같습니다.
const rs = fs.createReadStream("./package.json");
let content = "";
rs.on("open", () => {
console.log("start to read");
});
rs.on("data", chunk => {
content += chunk.toString("utf8");
});
rs.on("close", () => {
console.log("finish read, content is:
", content);
});
stream의 pipe를 통해 한 줄에 큰 파일의 복사 함수를 신속하게 봉인합니다.
function copyBigFile(src, target) {
fs.createReadStream(src).pipe(fs.createWriteStream(target));
}
이상은 Nodejs에서 모듈 fs 파일 시스템을 어떻게 사용하는지에 대한 상세한 내용입니다. 더 많은 Nodejs에 대한 자료는 저희 다른 관련 글에 주목하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.