Node.js에서 기본 제공되는 FileSystem(fs) 모듈을 사용하면 폴더를 생성하고, 파일을 생성하는 등 디렉토리에 접근하는 로직을 간단하게 구현할 수 있습니다.
fs.access(path, options, callback)
access 함수는 디렉토리나 파일에 접근할 수 있는 함수입니다.
첫번째 인자로는 접근할 디렉토리 path를 사용합니다.
두번째 인자로는 파일 접근권한에 대한 여부를 체크합니다.
F_OK | 존재여부 체크 |
R_OK | 읽기 권한 체크 |
W_OK | 쓰기 권한 체크 |
X_OK | 실행 권한 체크 |
Error 코드 ENOENT는 폴더가 존재하지 않는 경우 발생하는 에러입니다.
const fs = require("fs").promises;
const constants = require("fs").constants;
fs.access(
"./testFolder",
constants.F_OK | constants.W_OK | constants.R_OK | constants.X_OK
)
.then(() => {
return Promise.reject("폴더가 이미 존재합니다.");
})
.catch((err) => {
if (err.code === "ENOENT") {
console.log("폴더가 존재하지 않습니다.");
return fs.mkdir("./testFolder");
}
return Promise.reject(err);
})
.then(() => {
console.log("폴더가 성공적으로 생성되었습니다.");
return fs.open("./testFolder/file.js", "w");
})
.then((fileData) => {
console.log("새로운 파일을 생성했습니다.", fileData);
fs.rename("./testFolder/file.js", "./testFolder/newFile.js");
})
.then(() => {
console.log("파일명 변경이 완료되었습니다.");
})
.catch((err) => {
console.log(err);
});
fs.mkdir (path, callback)
접근하고자 하는 폴더가 존재하지 않는 경우 폴더를 생성해주면 됩니다. 이 때 사용되는 함수가 fs.mkdir입니다. 인자로는 생성할 디렉토리 path를 넣어주면 됩니다.
fs.mkdir("./testFolder");
fs.open(path, option, callback)
파일을 가져와 read, write 등의 액션을 취할 수 있는 함수입니다. 만약 가져오고자 하는 파일이 존재하지 않는 경우 뒤에 옵션값을 w로 줘서 새로 생성할 수 있습니다.
r | 파일을 읽어오는 경우 |
w | 파일을 쓰는 경우 |
a | 기존 파일에 추가하는 경우 |
fs.open("./testFolder/file.js", "w");
파일을 읽어온 뒤 파일아이디를 가져와 read와 write를 할 수 있습니다.
우선 파일을 'r' 모드로 읽어와 콜백함수를 실행합니다.
버퍼의 크기를 10Byte로 지정해주고
fs.read() 함수에 차례대로 buffer, offset, length, position 인자를 전달해줍니다.
콜백함수로 넘어오는 데이터 중 buffer에 파일에서 읽어오 데이터가 담깁니다.
파일 읽기가 종료되면 fs.close() 함수로 filehandle을 종료해줍니다.
fs.open('./testFolder/newFile.txt', 'r', (err, fd)=>{
let buf = Buffer.alloc(10);
fs.read(fd, buf, 0, 10, null, (err, bytesRead, buffer)=>{
console.log(bytesRead)
console.log(buffer.toString('utf8'));
});
fs.close(fd, ()=>{
console.log('파일 읽기 종료')
})
})
파일 쓰기는 기본적으로 read와 동일합니다.
우선 'w' 모드로 fs.open()함수를 실행합니다.
입력할 데이터를 버퍼로 변경해준 다음,
fs.write() 함수에 read() 함수와 동일하게 buffer, offset, length, position 인자를 전달해 데이터를 쓰고 난 후 fs.close()로 filehanlde를 종료해줍니다.
fs.open("./testFolder/newFile.txt", "w", (err, fd) => {
let buf = Buffer.from("새로운 데이터 입니다. \n");
fs.write(fd, buf, 0, buf.length, null, (err, bytesWrite, buffer) => {
fs.close(fd, () => {
console.log("파일 쓰기 종료");
});
});
});
마지막으로 append는 write와 거의 동일하게 구현할 수 있습니다.
fs.open 모드를 'a'로 변경하면 read를 하던 write를 하던 에러가 나지 않습니다.
데이터를 쓰는 부분은 write와 완전히 동일합니다.
결과물을 보면 기존 파일을 그대로 둔 채 입력한 데이터만 추가됩니다.
fs.open("./testFolder/newFile.txt", "a", (err, fd) => {
let buf = Buffer.from("append 데이터 입니다. \n");
fs.write(fd, buf, 0, buf.length, null, (err, bytesWrite, buffer) => {
fs.close(fd, () => {
console.log("파일 쓰기 종료");
});
});
});
fs.rename(oldPath, newPath)
디렉토리나 파일의 경로를 새로 지정합니다. 첫번째 인자로는 기존의 디렉토리 path를 입력하고 두번째 인자로는 변경할 디렉토리 path를 지정해줍니다.
리눅스에서 mv 명령과 동일한 결과를 가져옵니다.
fs.rename('./testFolder/newFile.js', './testFolder/newFile2.js')
'Programming' 카테고리의 다른 글
Node.js file System 폴더 파일 지우기 폴더 내용 확인하기 (0) | 2022.09.04 |
---|---|
Node.js Error Handling Object 에러 처리하기 (0) | 2022.09.03 |
Node.js readFile vs readFileSync promise file system module 사용법 (0) | 2022.09.03 |
Buffer Stream 이란? Node.js 버퍼 스트림 파이프 사용법 (0) | 2022.09.02 |
Node.js crypto 비대칭키 대칭키 구현하기 (0) | 2022.09.02 |
댓글