javascript - tutorial - নোড জেএস




Node.js ফাইল লেখা (8)

আমি Node.js ব্যবহার করার সময় একটি ফাইল লিখতে একটি উপায় খুঁজে বের করার চেষ্টা করছি, কিন্তু কোন সাফল্য ছাড়াই। আমি এটা কিভাবে করবো?


"লেখার" প্রশ্ন সম্পর্কে আমি জানতে চাই, কিন্তু আরো সাধারণ অর্থে "এপেন্ড" কিছু ক্ষেত্রে দরকারী হতে পারে কারণ কোনও ফাইলে পাঠ্য যুক্ত করার জন্য লুপে এটি ব্যবহার করা সহজ (ফাইল বিদ্যমান কিনা বা না)। আপনি যদি লাইন যোগ করতে চান তবে একটি "\ n" ব্যবহার করুন যেমন:

var fs = require('fs');
for (var i=0; i<10; i++){
    fs.appendFileSync("junk.csv", "Line:"+i+"\n");
}

আপনি fs (ফাইল সিস্টেম) মডিউল ব্যবহার করে একটি ফাইলে লিখতে পারেন।

আপনি এটি করতে পারেন কিভাবে একটি উদাহরণ এখানে:

const fs = require('fs');

const writeToFile = (fileName, callback) => {
  fs.open(fileName, 'wx', (error, fileDescriptor) => {
    if (!error && fileDescriptor) {
      // Do something with the file here ...
      fs.writeFile(fileDescriptor, newData, (error) => {
        if (!error) {
          fs.close(fileDescriptor, (error) => {
            if (!error) {
              callback(false);
            } else {
              callback('Error closing the file');
            }
          });
        } else {
          callback('Error writing to new file');
        }
      });
    } else {
      callback('Could not create new file, it may already exists');
    }
  });
};

আপনি এই কলব্যাক-ইন-কলব্যাক কোড স্ট্রাকচারটি প্রচার এবং async / await বিবৃতি ব্যবহার করেও পরিত্রাণ পেতে চাইতে পারেন। এই অ্যাসিডক্রোনাস কোড গঠন অনেক বেশি সমতল করা হবে। যে জন্য একটি সহজ util.promisify(original) ফাংশন ব্যবহার করা যেতে পারে। এটা আমাদের কল্যাব থেকে প্রতিশ্রুতি সুইচ করতে পারবেন। নীচের fs ফাংশন সঙ্গে উদাহরণ তাকান:

// Dependencies.
const util = require('util');
const fs = require('fs');

// Promisify "error-back" functions.
const fsOpen = util.promisify(fs.open);
const fsWrite = util.promisify(fs.writeFile);
const fsClose = util.promisify(fs.close);

// Now we may create 'async' function with 'await's.
async function doSomethingWithFile(fileName) {
  const fileDescriptor = await fsOpen(fileName, 'wx');
  
  // Do something with the file here...
  
  await fsWrite(fileDescriptor, newData);
  await fsClose(fileDescriptor);
}


আপনি লাইব্রেরি easy-file-manager ব্যবহার করতে পারেন

npm npm install easy-file-manager থেকে প্রথম npm install easy-file-manager

ফাইল আপলোড এবং অপসারণ নমুনা

var filemanager = require('easy-file-manager')
var path = "/public"
var filename = "test.jpg"
var data; // buffered image

filemanager.upload(path,filename,data,function(err){
    if (err) console.log(err);
});

filemanager.remove(path,"aa,filename,function(isSuccess){
    if (err) console.log(err);
});

আমি index.farticles/file- সিস্টেমের সূচক পছন্দ।

এটা আমার জন্য কাজ করে।

আমি কিভাবে node.js ফাইল লিখতে পারি দেখুন ?

fs = require('fs');
fs.writeFile('helloworld.txt', 'Hello World!', function (err) {
    if (err) 
        return console.log(err);
    console.log('Wrote Hello World in file helloworld.txt, just check it');
});

Helloworld.txt এর বিষয়বস্তু:

Hello World!

হালনাগাদ:
লিনাক্স নোডের মতো বর্তমান ডিরেক্টরীতে লিখুন, এটি অন্য কিছুতে মনে হচ্ছে না, তাই আমি এই মন্তব্যটি ঠিক এই ক্ষেত্রে জুড়তে চাই:
এই ব্যবহার করে ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH); ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH); যেখানে ফাইল লেখা আছে পেতে।


বর্তমানে একটি ফাইল লেখার তিনটি উপায় রয়েছে:

  1. fs.write(fd, buffer, offset, length, position, callback )

    বাফারটি ডিস্কে লেখা আছে কিনা তা নিশ্চিত করার জন্য আপনাকে কলব্যাকের জন্য অপেক্ষা করতে হবে। এটা buffered না।

  2. fs.writeFile(filename, data, [encoding], callback)

    সমস্ত তথ্য একই সময়ে সংরক্ষণ করা আবশ্যক; আপনি ক্রমিক সংখ্যা সঞ্চালন করতে পারবেন না।

  3. fs.createWriteStream(path, [options] )

    একটি WriteStream তৈরি করে, যা সুবিধাজনক কারণ আপনাকে একটি কলব্যাকের জন্য অপেক্ষা করতে হবে না। কিন্তু আবার, এটা buffered না।

নাম WriteStream নামে লিখুন, একটি প্রবাহ। সংজ্ঞা দ্বারা একটি প্রবাহ "একটি বাফার" তথ্য ধারণকারী একটি তথ্য যা (উত্স ► গন্তব্য)। কিন্তু একটি লেখার স্ট্রিম অগত্যা "buffered" হয় না। যখন আপনি n বার লিখেন এবং সময় n+1 সময়ে একটি স্ট্রিম "buffered" হয়, প্রবাহটি বাফারকে কার্নেল পাঠায় (কারণ এটি পূর্ণ এবং ফ্লাশ করা দরকার)।

অন্য কথায়: "একটি বাফার" বস্তু। এটা "buffered" কিনা তা বস্তুর একটি সম্পত্তি।

আপনি যদি কোডটি WriteStream , তবে WriteStream Stream অবজেক্ট থেকে লিখুন WriteStream । আপনি যদি মনোযোগ দেন তবে আপনি কীভাবে সামগ্রীটি ফ্লাশ করবেন তা দেখতে পাবেন; তারা কোন বাফারিং সিস্টেম আছে না।

যদি আপনি একটি স্ট্রিং লিখেন, এটি একটি বাফারে রূপান্তরিত হয় এবং তারপরে স্থানীয় স্তরটিতে পাঠানো হয় এবং ডিস্কে লেখা হয়। স্ট্রিং লেখার সময়, তারা কোন বাফার পূরণ করা হয় না। সুতরাং, যদি আপনি করেন:

write("a")
write("b")
write("c")

আপনি করছেন:

fs.write(new Buffer("a"))
fs.write(new Buffer("b"))
fs.write(new Buffer("c"))

যে আই / ও স্তর তিন কল। যদিও আপনি "বাফার" ব্যবহার করছেন তবে তথ্য buffered হয় না। একটি buffered স্ট্রিম করতে হবে: fs.write(new Buffer ("abc")) , আই / ও স্তর থেকে একটি কল।

এখন পর্যন্ত, Node.js v0.12 (স্থিতিশীল সংস্করণ 02/06/2015 ঘোষণা করা হয়েছে) এখন দুটি ফাংশনকে সমর্থন করে: cork() এবং uncork() । মনে হচ্ছে এই ফাংশনগুলি অবশেষে আপনাকে লিখার কলগুলি বাফার করতে অনুমতি দেবে।

উদাহরণস্বরূপ, জাভাতে কিছু ক্লাস রয়েছে যা buffered স্ট্রিমগুলি সরবরাহ করে ( BufferedOutputStream , BufferedWriter ...)। যদি আপনি তিন বাইট লিখেন, তবে এই বাইটগুলি কেবলমাত্র তিন বাইটের জন্য একটি আই / ও কল করার পরিবর্তে বাফার (মেমরি) সংরক্ষণ করা হবে। যখন বাফারটি পূর্ণ হয় তখন সামগ্রীটি ফ্লাশ এবং ডিস্কে সংরক্ষিত হয়। এই কর্মক্ষমতা উন্নত।

আমি কিছু আবিষ্কার করছি না, শুধু একটি ডিস্ক অ্যাক্সেস কীভাবে করা উচিত তা মনে রাখা।


স্থানীয় থেকে ফাইল csv কীভাবে পড়তে হয় এবং স্থানীয়ে csv ফাইলটি কীভাবে পড়তে হয় তার নমুনা এখানে।

var csvjson = require('csvjson'),
    fs = require('fs'),
    mongodb = require('mongodb'),
    MongoClient = mongodb.MongoClient,
    mongoDSN = 'mongodb://localhost:27017/test',
    collection;

function uploadcsvModule(){
    var data = fs.readFileSync( '/home/limitless/Downloads/orders_sample.csv', { encoding : 'utf8'});
    var importOptions = {
        delimiter : ',', // optional 
        quote     : '"' // optional 
    },ExportOptions = {
        delimiter   : ",",
        wrap        : false
    }
    var myobj = csvjson.toSchemaObject(data, importOptions)
    var exportArr = [], importArr = [];
    myobj.forEach(d=>{
        if(d.orderId==undefined || d.orderId=='') {
            exportArr.push(d)
        } else {
            importArr.push(d)
        }
    })
    var csv = csvjson.toCSV(exportArr, ExportOptions);
    MongoClient.connect(mongoDSN, function(error, db) {
        collection = db.collection("orders")
        collection.insertMany(importArr, function(err,result){
            fs.writeFile('/home/limitless/Downloads/orders_sample1.csv', csv, { encoding : 'utf8'});
            db.close();
        });            
    })
}

uploadcsvModule()

সমলয় লিখুন

fs.writeFileSync (ফাইল, তথ্য [, বিকল্প])

fs = require('fs');

fs.writeFileSync("synchronous.txt", "synchronous write!")

অ্যাসিঙ্ক্রোনাস লিখুন

fs.write ফাইল (ফাইল, তথ্য [, অপশন], কলব্যাক)

fs = require('fs');

fs.writeFile('asynchronous.txt', 'asynchronous write!', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});

কোথায়

file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
data <string> | <Buffer> | <Uint8Array>
options <Object> | <string>
callback <Function>

Offical ফাইল সিস্টেম (fs) docs পড়া মূল্য।


var path = 'public/uploads/file.txt',
buffer = new Buffer("some content\n");

fs.open(path, 'w', function(err, fd) {
    if (err) {
        throw 'error opening file: ' + err;
    }

    fs.write(fd, buffer, 0, buffer.length, null, function(err) {
        if (err) throw 'error writing file: ' + err;
        fs.close(fd, function() {
            console.log('file written');
        })
    });
});




fs