web-dev-qa-db-de.com

Wie kann ich mit JavaScript lesen und in eine Datei schreiben?

Kann jemand einen Beispielcode zum Lesen und Schreiben einer Datei mit JavaScript angeben?

163
ABC

Der Vollständigkeit halber gibt das OP nicht an, dass er dies in einem Browser tun möchte (wenn dies der Fall ist, ist dies im Allgemeinen nicht möglich)

Allerdings erlaubt Javascript per se dies; es kann mit serverseitigem Javascript gemacht werden.

Sehen Sie diese Dokumentation in der Javascript File-Klasse

Edit: Dieser Link zu den Sun-Dokumenten, die jetzt von Oracle verschoben wurden.

Um mit den Zeiten Schritt zu halten, finden Sie hier die node.js Dokumentation für die FileSystem-Klasse: http://nodejs.org/docs/latest/api/fs.html

Edit (2): Sie können Dateien jetzt clientseitig mit HTML5 lesen: http://www.html5rocks.com/de/tutorials/file/dndfiles/

60
DanSingerman

Browserseitiges Javascript ist nicht berechtigt, auf den Client-Computer zu schreiben, ohne dass zahlreiche Sicherheitsoptionen deaktiviert werden müssen

36
Gareth

Die Zukunft ist da! Die Vorschläge sind näher an der Fertigstellung, kein ActiveX oder Flash oder Java mehr. Jetzt können wir verwenden:

Sie können Drag & Drop verwenden, um die Datei in den Browser zu laden, oder eine einfache Upload-Steuerung. Nachdem der Benutzer eine Datei ausgewählt hat, können Sie diese mit Javascript lesen: http://www.html5rocks.com/de/tutorials/file/dndfiles/

15
Thomas Shields

hier ist der Mozilla-Vorschlag

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

dies wird mit einem Kompilierungs-Switch in Spidermonkey und auch in Adjens Extenscript implementiert. Zusätzlich (denke ich) bekommt man das File-Objekt in Firefox-Erweiterungen.

rhino hat eine (eher rudementäre) readFile-Funktion https://developer.mozilla.org/de/Rhino_Shell

für komplexere Dateioperationen in Rhino können Sie Java.io.File-Methoden verwenden.

sie erhalten jedoch nichts davon im Browser. Für ähnliche Funktionen in einem Browser können Sie die SQL-Datenbankfunktionen von HTML5, clientseitige Persistenz, Cookies und Flash-Speicherobjekte verwenden.

14
Breton

Diese Javascript-Funktion zeigt dem Benutzer, der dies über den Browser ausführt, ein vollständiges Dialogfeld "Speichern unter". Der Benutzer drückt OK und die Datei wird gespeichert.

Bearbeiten: Der folgende Code funktioniert nur mit dem Browser IE, da Firefox und Chrome diesen Code als Sicherheitsproblem eingestuft haben und ihn blockiert.

// 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;
}

Rufen Sie die Funktion auf:

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

Wenn Sie JScript (Microsofts Javascript) verwenden, um lokales Scripting mit WSH durchzuführen (NICHT in einem Browser!), Können Sie mit Scripting.FileSystemObject auf das Dateisystem zugreifen.

Ich denke, Sie können auf dasselbe Objekt in IE zugreifen, wenn Sie viele Sicherheitseinstellungen deaktivieren, aber das wäre eine sehr, sehr schlechte Idee.

MSDN hier

8
Dana Robinson

Für Firefox:

var file = Components.classes["@mozilla.org/file/local;1"].
       createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("/home");

Siehe https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O

Für andere schauen Sie sich die TiddlyWiki App an, um zu sehen, wie es funktioniert.

7

Derzeit können Dateien aus dem Kontext eines Browser-Tabs Fensters mit den/- File , FileWriter und FileSystem APIs geschrieben und gelesen werden, obwohl ihre Verwendung mit Einschränkungen verbunden ist diese Antwort).

Aber um deine Frage zu beantworten:

Verwenden von BakedGoods *

Datei schreiben:

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

Datei lesen:

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

Verwenden der rohen Datei-, FileWriter- und FileSystem-APIs

Datei schreiben:

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);

Datei lesen:

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);

Genau das, wonach du gefragt hast, richtig? Vielleicht, vielleicht nicht. Die letzten beiden APIs:

  • Sind derzeit nur in Chromium-basierten Browsern (Chrome & Opera) implementiert
  • Wurden von den W3C-Standards entfernt und sind ab sofort proprietäre APIs
  • Kann in Zukunft aus den implementierenden Browsern entfernt werden
  • Schränken Sie die Erstellung von Dateien auf eine sandbox (einen Speicherort außerhalb derer die Dateien keinen Effekt erzeugen können) auf der Festplatte ein

Darüber hinaus definiert die Dateisystemspezifikation keine Richtlinien, wie Verzeichnisstrukturen auf der Festplatte angezeigt werden sollen. In Chromium-basierten Browsern hat die Sandbox beispielsweise ein virtuelles Dateisystem (eine Verzeichnisstruktur, die nicht notwendigerweise auf der Festplatte in der gleichen Form vorhanden ist wie beim Zugriff vom Browser aus), in der die Verzeichnisse und Dateien, die mit den APIs erstellt wurden, werden platziert.

Obwohl Sie möglicherweise Dateien mit den APIs in ein System schreiben können, kann das Auffinden der Dateien ohne die APIs (gut, ohne die FileSystem-API) eine nicht triviale Angelegenheit sein.

Wenn Sie mit diesen Problemen/Einschränkungen umgehen können, sind diese APIs die einzige native Methode, um das zu tun, was Sie gefragt haben.

Wenn Sie für nicht native Lösungen offen sind, ermöglicht Silverlight auch die Datei-E/A eines Tab/Window-Wettbewerbs über IsolatedStorage . Managed Code ist jedoch erforderlich, um diese Funktion zu nutzen; Eine Lösung, die das Schreiben eines solchen Codes erfordert, liegt außerhalb des Rahmens dieser Frage.

Natürlich ist eine Lösung, die ergänzenden verwalteten Code verwendet und nur mit Javascript geschrieben werden muss, durchaus im Rahmen dieser Frage;):

//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){}
});

* BakedGoods ist eine Javascript-Bibliothek, die eine einheitliche Schnittstelle einrichtet, die für die Durchführung allgemeiner Speichervorgänge in allen nativen und einigen nicht-nativen Speichereinrichtungen verwendet werden kann. Sie wird hier von diesem Benutzer verwaltet:).

5
Kevin

Im Browser kann Javascript benutzerdefinierte Dateien lesen. Weitere Informationen zum Lesen von Dateien mithilfe der Datei-API ... finden Sie im Blog von Eric Bidelman . Das browserbasierte Javascript kann jedoch das Dateisystem des lokalen Computers nicht SCHREIBEN, ohne einige Sicherheitseinstellungen zu deaktivieren, da dies als Dateisystem angesehen wird Sicherheitsbedrohung für jede Website, um Ihr lokales Dateisystem willkürlich zu ändern.

Wenn Sie das sagen, gibt es einige Möglichkeiten, es zu umgehen, je nachdem, was Sie versuchen:

  1. Wenn es sich um Ihre eigene Site handelt, können Sie ein Java-Applet in die Webseite einbetten. Der Besucher muss jedoch Java auf einem lokalen Computer installieren und wird über das Sicherheitsrisiko informiert. Der Besucher muss das Laden des Applets zulassen. Ein Java-Applet ist wie eine ausführbare Software, die vollständigen Zugriff auf den lokalen Computer hat. 

  2. Chrome unterstützt ein Dateisystem, das einen Sandkasten des lokalen Dateisystems darstellt. Siehe diese Seite für Details. Dies bietet Ihnen möglicherweise die Möglichkeit, Dinge vorübergehend lokal zu speichern. Dies wird jedoch von anderen Browsern nicht unterstützt.

  3. Wenn Sie nicht auf Browser beschränkt sind, verfügt Node.js über eine vollständige Dateisystemschnittstelle. Hier finden Sie die Dateisystemdokumentation . Beachten Sie, dass Node.js nicht nur auf Servern ausgeführt werden kann, sondern auch auf jedem Clientcomputer, einschließlich Windows. Der Javascript-Testläufer Karma basiert auf Node.js. Wenn Sie einfach in Javascript auf dem lokalen Computer programmieren möchten, ist dies eine Option.

4
gm2008

Um eine Datei zu erstellen, versuchen Sie es

function makefile(){
  var fso;
  var thefile;

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

    thefile.close()
    }

Erstellen Sie Ihr Verzeichnis auf dem Laufwerk C: Windows bietet Sicherheit gegen das Schreiben aus dem Web Erstellen Sie beispielsweise den Ordner "tmp" im Laufwerk C.

2
Ifiok Idiang

Sie müssen Flash, Java oder Silverlight verwenden. Im Falle von Silverlight betrachten Sie Isolated Storage . Damit schreiben Sie Dateien auf Ihrem eigenen Spielplatz auf der Benutzerplatte. Es lässt Sie jedoch nicht außerhalb Ihres Spielplatzes schreiben.

2
Cory R. King

Sie können dies nicht über Browser-übergreifend tun. IE verfügt über Methoden, mit denen "vertrauenswürdige" Anwendungen ActiveX-Objekte zum Lesen/Schreiben von Dateien verwenden können. Dies ist jedoch leider der Fall.

Wenn Sie Benutzerinformationen speichern möchten, müssen Sie höchstwahrscheinlich Cookies verwenden.

1
Philip Reynolds

Im ReactJS-Test schreibt der folgende Code erfolgreich eine Datei:

import writeJsonFile from 'write-json-file';

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

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

Die Datei wird in das Verzeichnis geschrieben, in dem sich die Tests befinden. Das Schreiben in eine JSON-Datei '* .json' erzeugt eine Schleife!

1
Steve Pitchers

Sie können keine Datei-I/O-Vorgänge auf der Clientseite mit Javascript durchführen, da dies ein Sicherheitsrisiko darstellt. Sie müssten sie entweder zum Herunterladen und Ausführen eines Exe erhalten, oder wenn sich die Datei auf Ihrem Server befindet, verwenden Sie AJAX und eine serverseitige Sprache wie PHP, um die E/A auszuführen serverseitig

0
Click Upvote

Es gibt zwei Möglichkeiten, eine Datei mit JavaScript zu lesen und zu schreiben

  1. Verwendung von JavaScript-Erweiterungen

  2. Verwenden einer Webseite und Active X-Objekten

0
Grigor IWT