जावास्क्रिप्ट का उपयोग करके फ़ाइल में कैसे पढ़ें और लिखें?


177

क्या जावास्क्रिप्ट का उपयोग करके किसी फ़ाइल को पढ़ने और लिखने के लिए कोई नमूना कोड दे सकता है?


2
तुम्हें यह क्यों चाहिए? शायद वहाँ काम कर रहे हैं।
इओनु


1
वास्तव में इससे पहले कई बार पूछा गया है
annakata

1
मुझे क्लाइंट-साइड फ़ाइल संग्रहण के बारे में यह संसाधन मिला। HTML5rocks.com/en/tutorials/offline/storage मैंने जो इकट्ठा किया है, उससे HTML5 वास्तव में वेबसइट को उपयोगकर्ता की स्थानीय हार्ड ड्राइव पर जानकारी संग्रहीत करने की अनुमति देता है, लेकिन अधिक डेटाबेस-जैसे मनोर में। ब्राउज़र फ़ाइल संग्रहण का प्रबंधन करता है और वर्ल्ड वाइड वेब को ब्रिम के नीचे हार्ड ड्राइव लोड करने से रोकने के लिए कुछ सीमाएं लगाता है। वे अभी तक पूरी तरह से मूर्ख सबूत नहीं हैं, लेकिन वे इस लेख के अनुसार, कम से कम ट्वीक किए जा रहे हैं। विवरण के लिए पढ़ें।
गैरेट

2
Ajax का उपयोग करें और PHP हैंडल के साथ फ़ाइलों को पढ़ना और लिखना। यदि आप फ़ाइलों को क्लाइंट साइड में लिखना चाहते हैं, तो आपको इसे भूल जाना चाहिए। इसे सर्वर पर कई सुरक्षा विकल्पों को निष्क्रिय करने की आवश्यकता होगी और आपको एक अत्यंत असुरक्षित साइट के साथ छोड़ दिया जाएगा। यदि आप PHP का उपयोग नहीं करना चाहते हैं, तो शायद आप क्लाइंट कंप्यूटर पर डेटा स्टोर करने के लिए जावास्क्रिप्ट कुकीज़ का उपयोग करके प्राप्त करना चाहते हैं।
डेन ब्रे

जवाबों:


64

पूर्णता के लिए, ओपी यह नहीं बताता है कि वह ऐसा ब्राउज़र में करना चाहता है (यदि वह है, जैसा कि कहा गया है, यह आमतौर पर संभव है)

हालाँकि, प्रति से जावास्क्रिप्ट यह अनुमति देता है; यह सर्वर साइड जावास्क्रिप्ट के साथ किया जा सकता है।

इस फ़ाइल को जावास्क्रिप्ट फ़ाइल वर्ग पर देखें

संपादित करें : यह लिंक सन डॉक्स के लिए था जो अब ओरेकल द्वारा स्थानांतरित कर दिया गया है।

फाइलसिस्टम वर्ग के लिए यहाँ नोड्स। Js प्रलेखन के साथ समय रखने के लिए: http://nodejs.org/docs/latest/api/fs.html

संपादित करें (2) : आप HTML5 के साथ अब क्लाइंट फाइल को पढ़ सकते हैं: http://www.html5rocks.com/en/tutorials/file/dndfiles/


3
क्या HTML5 का उपयोग करके स्थानीय फ़ाइलों को लिखना संभव है?
एंडरसन ग्रीन

1
इसके अलावा, आपकी स्थिति के आधार पर आप php स्क्रिप्ट के लिए अजाक्स कॉल कर सकते हैं और उस तरह से डेटा को डंप कर सकते हैं। यह मेरी स्थिति में उपयोगी था जहां मैं जावास्क्रिप्ट साइड पर उत्पन्न कुछ डेटा को स्टोर करना चाहता था, लेकिन इससे कोई फर्क नहीं पड़ता कि यह वहां कैसे मिला।
डस्टिन ग्राहम

1
@DustinGraham, वास्तव में अब क्रोम एपीआई के साथ हम वास्तव में जावास्क्रिप्ट के माध्यम से क्लाइंट साइड में फाइल लिख सकते हैं ?
पचेरियर

40

ब्राउज़र-साइड जावास्क्रिप्ट को क्लाइंट मशीन पर लिखने की अनुमति नहीं है, जिसमें बहुत सारे सुरक्षा विकल्प अक्षम हैं


44
@marcgg: कि यह उत्तर अधूरा है, गलत नहीं है। और, इसका सामना करते हैं, यह अत्यधिक संभावना है कि यह उत्तर ओपी के उपयोग के मामले को कवर करता है
ऑर्बिट

36
यदि ओपी ब्राउज़र के बाहर जावास्क्रिप्ट का उपयोग करने की योजना बना रहा था, तो यह असामान्य रूप से पर्याप्त है कि उन्होंने शायद इसका उल्लेख किया होगा। यह एक ब्राउज़र मानने के लिए अनुचित नहीं है (और निश्चित रूप से गलत नहीं है)। +1 (marcgg -1 के लिए बनाने के लिए)।
माइकल मार्टिन-स्मकर

2
@LightnessRacesinOrbit डाउनवोट बटन का मतलब यह नहीं है कि उत्तर गलत माना जाता है। इसका टूलटिप टेक्स्ट है This answer is not useful
स्क्रूफी

1
@ माइक - यह तब नहीं था जब यह उत्तर लिखा गया था, और यह अभी भी डिफ़ॉल्ट रूप से ब्राउज़र-साइड जेएस मानने के लिए उचित है।
क्वेंटिन

16

भविष्य यहाँ है! प्रस्ताव पूर्ण होने के करीब हैं, कोई और अधिक ActiveX या फ़्लैश या जावा नहीं है। अब हम उपयोग कर सकते हैं:

आप ब्राउज़र में फ़ाइल, या एक सरल अपलोड नियंत्रण पाने के लिए ड्रैग / ड्रॉप का उपयोग कर सकते हैं। एक बार उपयोगकर्ता द्वारा किसी फ़ाइल का चयन करने के बाद, आप इसे w / जावास्क्रिप्ट पढ़ सकते हैं: http://www.html5rocks.com/en/tutorials/file/dndfiles/


लिंक अब टूट गए हैं।
प्रोमेथियस

लिंक फिर से टूट गए हैं, वे दोनों एक ही लिंक हैं, लेकिन अलग-अलग अर्थों के साथ .. टूटी हुई।
इंसाइड्सिन


14

यहाँ मोज़िला प्रस्ताव है

http://www-archive.mozilla.org/js/js-file-object.html

यह स्पिडरमोनकी में एक संकलन स्विच के साथ लागू किया जाता है, और एडोब के एक्सटेंडस्क्रिप्ट में भी। इसके अतिरिक्त (मुझे लगता है) आपको फ़ायरफ़ॉक्स एक्सटेंशन में फ़ाइल ऑब्जेक्ट मिलता है।

rhino में एक (बल्कि असभ्य) readFile फ़ंक्शन https://developer.mozilla.org/en/Rhh_Rhell है

राइनो में अधिक जटिल फ़ाइल संचालन के लिए, आप java.io.File विधियों का उपयोग कर सकते हैं।

हालांकि आपको ब्राउज़र में यह सामान नहीं मिलेगा। किसी ब्राउज़र में समान कार्यक्षमता के लिए आप HTML5, क्लाइंटसाइड दृढ़ता, कुकीज़ और फ्लैश स्टोरेज ऑब्जेक्ट से SQL डेटाबेस फ़ंक्शन का उपयोग कर सकते हैं।


12

यह जावास्क्रिप्ट फ़ंक्शन ब्राउज़र के माध्यम से इसे चलाने वाले उपयोगकर्ता के लिए एक पूर्ण "सेव एज़" डायलॉग बॉक्स प्रस्तुत करता है। उपयोगकर्ता ठीक दबाता है और फ़ाइल सहेज ली जाती है।

संपादित करें: निम्नलिखित कोड केवल IE ब्राउज़र के साथ काम करता है क्योंकि फ़ायरफ़ॉक्स और क्रोम ने इस कोड को एक सुरक्षा समस्या माना है और इसे काम करने से रोक दिया है।

// content is the data you'll write to file<br/>
// filename is the filename<br/>
// what I did is use iFrame as a buffer, fill it up with text
function save_content_to_file(content, filename)
{
    var dlg = false;
    with(document){
     ir=createElement('iframe');
     ir.id='ifr';
     ir.location='about.blank';
     ir.style.display='none';
     body.appendChild(ir);
      with(getElementById('ifr').contentWindow.document){
           open("text/plain", "replace");
           charset = "utf-8";
           write(content);
           close();
           document.charset = "utf-8";
           dlg = execCommand('SaveAs', false, filename+'.txt');
       }
       body.removeChild(ir);
     }
    return dlg;
}

समारोह को आमंत्रित करें:

save_content_to_file("Hello", "C:\\test");

1
ir = createElement ( 'आइफ्रेम'); - iframe iFrame ID है।
Temp

इसके अलावा, क्या यह सभी ऑपरेटिंग सिस्टम पर काम करेगा (जब तक एक वैध फ़ाइल स्थान चुना जाता है?)
एंडरसन ग्रीन

4
यह एक अच्छा समाधान है लेकिन, क्या यह केवल IE के साथ काम करता है? मैंने IE और FF की कोशिश की और FF के साथ यह काम नहीं करता है।
u.gen

9

यदि आप WSH (ब्राउज़र में नहीं है!) का उपयोग करके स्थानीय स्क्रिप्टिंग करने के लिए JScript (Microsoft का जावास्क्रिप्ट) का उपयोग कर रहे हैं, तो आप Scripting.FileSystemObjectफ़ाइल सिस्टम तक पहुँचने के लिए उपयोग कर सकते हैं ।

मुझे लगता है कि यदि आप बहुत सारी सुरक्षा सेटिंग्स बंद कर देते हैं, तो आप IE में उसी ऑब्जेक्ट को एक्सेस कर सकते हैं, लेकिन यह बहुत ही बुरा विचार होगा।

यहाँ MSDN


मैं एक htaआवेदन में यह करना चाहता था और वह इसे हल करता है
22

8

वर्तमान में, फ़ाइलों को फ़ाइल , फ़ाइलराइटर और फ़ाइलसिस्टम एपीआई के साथ एक ब्राउज़र टैब / विंडो के संदर्भ से लिखा और पढ़ा जा सकता है , हालांकि उनके उपयोग के लिए चेतावनी हैं (इस उत्तर की पूंछ देखें)।

लेकिन आपके सवाल का जवाब देने के लिए:

BakedGoods * का उपयोग करना

फ़ाइल लिखें:

bakedGoods.set({
    data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
    storageTypes: ["fileSystem"],
    options: {fileSystem:{storageType: Window.PERSISTENT}},
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

फ़ाइल पढ़ें:

bakedGoods.get({
        data: ["testFile"],
        storageTypes: ["fileSystem"],
        options: {fileSystem:{storageType: Window.PERSISTENT}},
        complete: function(resultDataObj, byStorageTypeErrorObj){}
});

कच्चे फ़ाइल, FileWriter और FileSystem API का उपयोग करना

फ़ाइल लिखें:

function onQuotaRequestSuccess(grantedQuota)
{

    function saveFile(directoryEntry)
    {

        function createFileWriter(fileEntry)
        {

            function write(fileWriter)
            {
                var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
                fileWriter.write(dataBlob);              
            }

            fileEntry.createWriter(write);
        }

        directoryEntry.getFile(
            "testFile", 
            {create: true, exclusive: true},
            createFileWriter
        );
    }

    requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}

var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);

फ़ाइल पढ़ें:

function onQuotaRequestSuccess(grantedQuota)
{

    function getfile(directoryEntry)
    {

        function readFile(fileEntry)
        {

            function read(file)
            {
                var fileReader = new FileReader();

                fileReader.onload = function(){var fileData = fileReader.result};
                fileReader.readAsText(file);             
            }

            fileEntry.file(read);
        }

        directoryEntry.getFile(
            "testFile", 
            {create: false},
            readFile
        );
    }

    requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}

var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);

बस आपने क्या हक मांगा? शायद शायद नहीं। एपीआई के बाद के दो:

  • वर्तमान में केवल क्रोमियम-आधारित ब्राउज़रों (क्रोम और ओपेरा) में लागू किया जाता है
  • W3C मानक ट्रैक को हटा दिया गया है, और अब तक मालिकाना एपीआई हैं
  • भविष्य में कार्यान्वयन ब्राउज़रों से हटाया जा सकता है
  • एक सैंडबॉक्स (एक स्थान जिसके बाहर की फाइलें कोई प्रभाव नहीं पैदा कर सकती हैं) को डिस्क पर फ़ाइलों के निर्माण का विरोध करें

इसके अतिरिक्त, फ़ाइलसिस्टम कल्पना यह निर्धारित नहीं करती है कि डिस्क पर निर्देशिका संरचनाएँ कैसे दिखती हैं। उदाहरण के लिए क्रोमियम-आधारित ब्राउज़रों में, सैंडबॉक्स में एक वर्चुअल फ़ाइल सिस्टम (एक निर्देशिका संरचना होती है जो आवश्यक रूप से डिस्क पर उसी रूप में मौजूद नहीं होती है जो ब्राउज़र के भीतर से एक्सेस करते समय होती है), जिसके भीतर निर्देशिका और फाइलें एपीआई रखे जाते हैं।

इसलिए यद्यपि आप एपीआई के साथ एक प्रणाली के लिए फाइल लिखने में सक्षम हो सकते हैं, एपीआई के बिना फ़ाइलों का पता लगाने (अच्छी तरह से, फाइलसिस्टम एपीआई के बिना) एक गैर-तुच्छ मामला हो सकता है।

यदि आप इन मुद्दों / सीमाओं से निपट सकते हैं, तो ये API आपके द्वारा पूछे गए कार्यों को करने का एकमात्र मूल तरीका है।

यदि आप गैर-देशी समाधानों के लिए खुले हैं, तो सिल्वरलाइट भी आइसोलेटेडस्टोरेज के माध्यम से टैब / विंडो प्रतियोगिता से फ़ाइल i / o की अनुमति देता है । हालाँकि, इस सुविधा का उपयोग करने के लिए प्रबंधित कोड आवश्यक है; एक समाधान जिसके लिए इस तरह के कोड को लिखना आवश्यक है, इस प्रश्न के दायरे से परे है।

बेशक, एक समाधान जो पूरक प्रबंधित कोड का उपयोग करता है, केवल एक जावास्क्रिप्ट को लिखने के लिए छोड़कर, इस प्रश्न के दायरे में अच्छी तरह से है;):

//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
    data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
    storageTypes: ["fileSystem", "silverlight"],
    options: {fileSystem:{storageType: Window.PERSISTENT}},
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});

* बेक्डगूड एक जावास्क्रिप्ट पुस्तकालय है जो एक समान इंटरफ़ेस स्थापित करता है जिसका उपयोग सभी देशी और कुछ गैर-देशी भंडारण सुविधाओं में आम भंडारण संचालन करने के लिए किया जा सकता है। यह इस आदमी द्वारा यहीं बनाए रखा गया है:)।



5

ब्राउज़र के संदर्भ में, जावास्क्रिप्ट उपयोगकर्ता-निर्दिष्ट फ़ाइल को पढ़ सकता है। फ़ाइल एपीआई का उपयोग करके फ़ाइल पढ़ने के बारे में विस्तार से एरिक बिडेलमैन का ब्लॉग देखें । हालांकि, कुछ सुरक्षा सेटिंग्स को अक्षम किए बिना ब्राउज़र-आधारित जावास्क्रिप्ट के लिए स्थानीय कंप्यूटर की फ़ाइल प्रणाली को गलत करना संभव नहीं है, क्योंकि यह किसी भी वेबसाइट के लिए आपके स्थानीय फ़ाइल सिस्टम को मनमाने ढंग से बदलने के लिए सुरक्षा के खतरे के रूप में माना जाता है।

यह कहते हुए कि, जो आप करना चाह रहे हैं उसके आधार पर इसके आसपास काम करने के कुछ तरीके हैं:

  1. यदि यह आपकी अपनी साइट है, तो आप वेब पेज में जावा एप्लेट को एम्बेड कर सकते हैं। हालांकि, आगंतुक को स्थानीय मशीन पर जावा स्थापित करना होगा और सुरक्षा जोखिम के बारे में सतर्क किया जाएगा। आगंतुक को एप्लेट को लोड करने की अनुमति देनी होगी। जावा एप्लेट एक निष्पादन योग्य सॉफ्टवेयर की तरह है जिसकी स्थानीय कंप्यूटर तक पूरी पहुंच है।

  2. Chrome एक फ़ाइल सिस्टम का समर्थन करता है जो स्थानीय फ़ाइल सिस्टम का सैंडबॉक्स वाला भाग है। देखें यह पेज जानकारी के लिए। यह संभवतः आपके लिए स्थानीय रूप से चीजों को अस्थायी रूप से सहेजने के लिए प्रदान करता है। हालाँकि, यह अन्य ब्राउज़रों द्वारा समर्थित नहीं है।

  3. यदि आप ब्राउज़र तक सीमित नहीं हैं, तो Node.js के पास एक पूर्ण फ़ाइल सिस्टम इंटरफ़ेस है। इसकी फाइल सिस्टम प्रलेखन के लिए यहां देखें । ध्यान दें कि Node.js न केवल सर्वर पर, बल्कि विंडोज़ सहित किसी भी क्लाइंट कंप्यूटर पर चल सकता है। जावास्क्रिप्ट परीक्षण धावक कर्म Node.js. पर आधारित है यदि आप स्थानीय कंप्यूटर पर जावास्क्रिप्ट में प्रोग्राम करना पसंद करते हैं, तो यह एक विकल्प है।


3

फ़ाइल प्रयास बनाने के लिए

function makefile(){
  var fso;
  var thefile;

    fso = new ActiveXObject("Scripting.FileSystemObject");
    thefile=fso.CreateTextFile("C:\\tmp\\MyFile.txt",true);

    thefile.close()
    }

C ड्राइव में अपनी निर्देशिका बनाएँ क्योंकि विंडोज़ में वेब से लिखने के खिलाफ सुरक्षा है उदा C ड्राइव में "tmp" नाम का फ़ोल्डर बनाएँ।


2

आपको फ़्लैश, जावा या सिल्वरलाइट की ओर मुड़ना होगा। सिल्वरलाइट के मामले में, आप पृथक संग्रहण को देख रहे हैं । यह आपको उपयोगकर्ताओं के डिस्क पर अपने स्वयं के खेल के मैदान में फ़ाइलों को लिखने के लिए मिलेगा। हालांकि यह आपको अपने खेल के मैदान के बाहर लिखने नहीं देगा।


1

आप इसे किसी भी क्रॉस-ब्राउज़र तरीके से नहीं कर सकते। IE में फ़ाइलों को पढ़ने / लिखने के लिए ActiveX ऑब्जेक्ट का उपयोग करने के लिए "विश्वसनीय" अनुप्रयोगों को सक्षम करने के तरीके हैं, लेकिन यह दुर्भाग्य से है।

यदि आप उपयोगकर्ता जानकारी को सहेजना चाह रहे हैं, तो आपको कुकीज़ का उपयोग करने की सबसे अधिक आवश्यकता होगी।


4
और "विश्वसनीय" अनुप्रयोग बनने में बाधा क्या ठीक है? एक पुष्टि संवाद?
ब्रेटन

@Philip, किसी ने नहीं कहा कि इसे क्रॉस ब्राउज़र होना चाहिए। प्रत्येक ब्राउज़र के लिए एक अलग समाधान ठीक है।
पचेरियर

1

एक ReactJS परीक्षण से, निम्नलिखित कोड सफलतापूर्वक एक फ़ाइल लिखता है:

import writeJsonFile from 'write-json-file';

const ans = 42;
writeJsonFile('answer.txt', ans);

const json = {"answer": ans};
writeJsonFile('answer_json.txt', json);

फ़ाइल को परीक्षण युक्त निर्देशिका को लिखा जाता है, इसलिए एक वास्तविक JSON फ़ाइल '* .json' पर लिखना एक लूप बनाता है!


0

आप जावास्क्रिप्ट के माध्यम से क्लाइंट साइड पर फ़ाइल i / o नहीं कर सकते क्योंकि यह एक सुरक्षा जोखिम होगा। आपको या तो उन्हें डाउनलोड करने और एक exe चलाने के लिए प्राप्त करना होगा, या यदि फ़ाइल आपके सर्वर पर है, AJAX और सर्वर साइड भाषा जैसे PHP का उपयोग सर्वर पर i / o करने के लिए करें


1
यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
harpun

@ फरपुन, बिल्कुल। कृपया इस उत्तर को हटा दें और इसे टिप्पणी में परिवर्तित करें।
पचेरियर

0

जावास्क्रिप्ट का उपयोग करके फ़ाइल को पढ़ने और लिखने के दो तरीके हैं

  1. जावास्क्रिप्ट एक्सटेंशन का उपयोग करना

  2. एक वेब पेज और एक्टिव एक्स ऑब्जेक्ट्स का उपयोग करना


-1

यहाँ क्रोम v52 के लिए समाधान लिखा है + (उपयोगकर्ता को अभी भी एक गंतव्य doe का चयन करने की आवश्यकता है ...)
स्रोत: StreamSaver.js

<!-- load StreamSaver.js before streams polyfill to detect support -->
<script src="StreamSaver.js"></script>
<script src="https://wzrd.in/standalone/web-streams-polyfill@latest"></script>
const writeStream = streamSaver.createWriteStream('filename.txt')
const encoder = new TextEncoder
let data = 'a'.repeat(1024)
let uint8array = encoder.encode(data + "\n\n")

writeStream.write(uint8array) // must be uInt8array
writeStream.close()

क्लाइंट पक्ष पर उत्पन्न बड़े डेटा को लिखने के लिए सबसे उपयुक्त।
अन्यथा मैं Blob / Files को बचाने के लिए FileSaver.js का उपयोग करने का सुझाव देता हूं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.