Home

Node.js. Файлова система node.js

Зміст

  1. Найбільш використовувані функції
  2. Богдан Лямзін
  3. Варіант 1. Через колбеки
  4. Варіант 2. Через проміси
  5. Варіант 3. Через проміси async/await
  6. Перейменування файлу
  7. Видалення файлу
  8. Створення папки
  9. Видалення папки
  10. scaning folder
  11. Функція що створює 10 файлів gpt chat
  12. ISON - примітки
  13. Робота з CSV файлами

Найбільш використовувані функції:

  1. fs.readFile(filename, [options]) - Читання файлу
  2. fs.writeFile(filename, data, [options]) - Запис/створення файлу
  3. fs.appendFile(filename, data, [options]) - Додавання у файл
  4. fs.rename(oldPath, newPath) - Перейменування файлу
  5. fs.unlink(path) - Видалення файлу
  6. fs.readdir(path.join(__dirname, "/files")) - Масив файлів у папці
  1. const path = require("path"); – статичний шлях
  2. path.join(__dirname, "files/file.txt");
  3. path.extname(path) розширення файлу
  4. path.basename(path[, suffix])

Богдан Лямзін

Рекомендє без try/catch та then/catch, бо воно і так ловить помилки

    const readFile = async() => {
        const textFile = await fs.readFile("./files/file2.txt", "utf-8");
        console.log(textFile);   // zxcv
    }
    readFile(); 

Варіант 1. Через колбеки

    const fs = require("fs"); або
    const fs = require("node:fs");

readFile(). bufer

    fs.readFile("./files/file.txt", (err, res) => {
        if(err) throw err;
        const bufer = res;
        console.log(bufer);
        const textFile = bufer.toString();
        console.log(textFile);
    });

readFile(). "utf-8"

    fs.readFile("./files/file.txt", {encoding: "utf-8"}, (err, res) => {
        if(err) throw err;
        const data = res;
        console.log(data);
    });

writeFile()

    const myText = "\nYupiter: 0123456789";
    fs.writeFile("./files/file2.txt", myText, {encoding: "utf-8"}, (err, res) => {
        if(err) throw err;
        console.log("file writen!");
    });

Варіант 2. Через проміси

    const fs = require("node:fs/promises"); або
    const fs = require("node:fs").promises;

readFile(). "utf-8"

    const fs = require("node:fs");

    fs.promises.readFile("./files/file.txt", "utf-8")
        .then(data => console.log(data))
        .catch(err => console.log(err));

або

    const fs = require("node:fs/promises"); або
    const fs = require("node:fs").promises;
                
    fs.readFile("./files/file.txt", "utf-8")
        .then(data => console.log(data))
        .catch(err => console.log(err)); 

Варіант 3. Через проміси async/await

readFile()

    const fs = require("node:fs/promises"); або
                                
    async function readMyFile() {
        const data = await fs.readFile("./files/file.txt", "utf-8");
        return data;
    }
    readMyFile()
        .then(data => console.log(data))
        .catch(err => console.log(err));

writeFile()

                         
    const myText = "\nYupiter: 0123456789";

    fs.writeFile("./files/file2.txt", myText, {encoding: "utf-8"})
        .then(() => console.log("file writen!"))
        .catch(err => console.log(err));

ApendFile()

    const myText = "\nYupiter: 0123456789";
                                
    fs.appendFile("./files/file2.txt", myText, {encoding: "utf-8"})
        .then(() => console.log("file writen!"))
        .catch(err => console.log(err));

Перейменування файлу

    async function renameFile() {
        try{
            await fs.rename("./files/file6.txt", "./files/file7.txt");
            console.log("Rename cuccesful!");
        }
        catch {
            throw err;
        }
    }
    renameFile();

or

    async function renameFile() {
        await fs.rename("./files/file6.txt", "./files/file7.txt");
        console.log("Rename cuccesful!");
    }
    renameFile();

Видалення файлу

V1

    fs.unlink("./files/file5.txt")
        .then(() => console.log("Delete cuccesful!"))
        .catch(err => console.log(err)); 

V2 function async/await

    async function delFile() {
        await fs.unlink("./files/file4.txt");
    }         
    delFile()
        .then(() => console.log("Delete cuccesful!"))
        .catch(err => console.log(err))
                

V3 function try/catch

    async function delFile() {
        try{
            await fs.unlink("./files/file4.txt");
            console.log("Delete cuccesful!");
        }
        catch {
            throw err;
        }
    }
    delFile();
                

створення папки

    async function makeDirectory() {
        // const projectFolder = join(__dirname, 'test', 'project');
        const dirCreation = await fs.mkdir("./files/folder2", { recursive: true });
        console.log(dirCreation);
        // return dirCreation;
    }
    makeDirectory().catch(console.error);

видалення папки

    async function dellDirectory() {
        await fs.rmdir("./files/folder2");
        console.log("Delete cuccesful!");
    }  
    dellDirectory().catch(console.error);
                

scaning folder

Нижче функця робить масив файлів у папці

    async function scanFiles() {
        const dataArr = await fs.readdir(path.join(__dirname, "/files"));
        console.log(dataArr);
        // return data;
    } 
    scanFiles();
    
                

Нижче функця сканує файли у папці

    async function scanFiles2() {
        const dataArr = await fs.readdir(path.join(__dirname, "/files"));
        return Promise.all(
            dataArr.map(async filename => {
                const stats = await fs.stat(`./files/${filename}`);
                return {
                    Name: filename,
                    Size: stats.size,
                    Date: stats.mtime,
                }
            })
        );
    }
    scanFiles2()
        .then(result => console.table(result))
        .catch(err => console.table(err));
node-fs

Функція що створює 10 файлів gpt chat

    const fs = require('fs');
    const path = require('path');

    function createFiles() {
        for (let i = 1; i <= 10; i++) {
            // Форматування імені файлу (B01, B02, ..., B10)
            const fileName = `B${String(i).padStart(2, '0')}.txt`;

            // Отримання повного шляху до файлу
            const filePath = path.join(__dirname, fileName);

            // Створення порожнього файлу
            fs.writeFileSync(filePath, '', 'utf8');

            console.log(`Файл створено: ${fileName}`);
        }
    }
createFiles(); 

ISON - примітки

Перевіряємо JSON дані на валідаторі

Один з варіантів запису JSON файлу:

    fs.writeFile("file.json", JSON.stringify(data), (err)=> {
        if(err) console.log(err);
    });
                

Читаємо JSON файл. Варіант 1

fs.readFile("path", "utf-8", callback);

Читаємо JSON файл. Варіант 2

const jsonData = require("./path/file.json")

Якщо в шляху не вказати "./" то воно буде шукати в папці "node_modules"

Робота з CSV файлами

В такому файлі дані зберігаються структуровано та розділяються якимось символом

Зчитаємо csv файл

  1. npm install csv-parser
  2. or: yarn add csv-parser
  3. example:
  4.     const csv = require('csv-parser');
        const fs = require('fs');
        const results = [];
        
        const path = require("path");
        const pathFileCsv = path.join(__dirname, "fileFolder", "made.csv");
        
        // === Прочитать csv файл ====
        fs.createReadStream(pathFileCsv)
            .pipe(csv()) // Параметри розделителя. (запятая)
            .on('data', (data) => results.push(data))
            .on('end', () => {
                console.log(results);
        });
                            

Записати csv файл

  1. npm i csv-writer
  2. example:
  3.     const students = [
            {user: "Petr", age: "34", range: 10},
            {user: "Pit", age: "14", range: 3},
            {user: "Bred", age: "44", range: 20},
            {user: "Serg", age: "46", range: 55},
        ];
    
        const createCsvWriter = require('csv-writer').createObjectCsvWriter;
    
        const csvWriter = createCsvWriter({
            path: './src/fileFolder/file.csv',
            header: [
                {id: 'user', title: 'User'},
                {id: 'age', title: 'Age'},
                {id: 'range', title: 'Range'}
            ]
        });
    
        csvWriter.writeRecords(students)       // returns a promise
            .then(() => {
                console.log('...Done');
            });