Come leggere un file di testo locale?

Sto cercando di scrivere un semplice lettore di file di testo creando una funzione che raccolga il percorso del file e converta ogni riga di testo in un array di caratteri, ma non funziona.

function readTextFile() { var rawFile = new XMLHttpRequest(); rawFile.open("GET", "testing.txt", true); rawFile.onreadystatechange = function() { if (rawFile.readyState === 4) { var allText = rawFile.responseText; document.getElementById("textSection").innerHTML = allText; } } rawFile.send(); } 

Cosa sta andando storto qui?

Questo sembra non funzionare dopo aver cambiato il codice un po ‘da una revisione precedente e ora mi sta dando un’eccezione XMLHttpRequest 101.

Ho provato questo su Firefox e funziona, ma in Google Chrome non funziona e continua a darmi un’eccezione 101. Come posso farlo funzionare non solo su Firefox, ma anche su altri browser (in particolare Chrome )?

È necessario verificare lo stato 0 (come quando si caricano i file localmente con XMLHttpRequest , non si ottiene uno stato restituito perché non proviene da un Webserver )

 function readTextFile(file) { var rawFile = new XMLHttpRequest(); rawFile.open("GET", file, false); rawFile.onreadystatechange = function () { if(rawFile.readyState === 4) { if(rawFile.status === 200 || rawFile.status == 0) { var allText = rawFile.responseText; alert(allText); } } } rawFile.send(null); } 

E specifica il file:// nel tuo nome file:

 readTextFile("file:///C:/your/path/to/file.txt"); 

Visita Javascripture ! E vai nella sezione readAsText e prova l’esempio. Sarai in grado di sapere come funziona la funzione readAsText di FileReader .

       
...

Dopo l’introduzione di fetch api in javascript, leggere i contenuti dei file non potrebbe essere più semplice.

leggendo un file di testo

 fetch('file.txt') .then(response => response.text()) .then(text => console.log(text)) // outputs the content of the text file 

leggendo un file json

 fetch('file.json') .then(response => response.json()) .then(jsonResponse => console.log(jsonResponse)) // outputs a javascript object from the parsed json 

Aggiornamento 30/07/2018 (disclaimer):

Questa tecnica funziona bene in Firefox , ma sembra che l’implementazione del fetch Chrome non supporti file:/// schema di file:/// URL alla data di stesura di questo aggiornamento (testato in Chrome 68).

 var input = document.getElementById("myFile"); var output = document.getElementById("output"); input.addEventListener("change", function () { if (this.files && this.files[0]) { var myFile = this.files[0]; var reader = new FileReader(); reader.addEventListener('load', function (e) { output.textContent = e.target.result; }); reader.readAsBinaryString(myFile); } }); 
  

Prova a creare due funzioni:

 function getData(){ //this will read file and send information to other function var xmlhttp; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { var lines = xmlhttp.responseText; //*here we get all lines from text file* intoArray(lines); *//here we call function with parameter "lines*" } } xmlhttp.open("GET", "motsim1.txt", true); xmlhttp.send(); } function intoArray (lines) { // splitting all text data into array "\n" is splitting data from each new line //and saving each new line as each element* var lineArr = lines.split('\n'); //just to check if it works output lineArr[index] as below document.write(lineArr[2]); document.write(lineArr[3]); } 

altro esempio: il mio lettore con la class FileReader

          
Source file

Jon Perryman,

Sì js può leggere file locali (vedere FileReader ()) ma non automaticamente: l’utente deve passare il file o un elenco di file allo script con un html .

Quindi con js è ansible elaborare (vista di esempio) il file o l’elenco di file, alcune delle loro proprietà e il contenuto di file o file.

Quello che js non può fare per ragioni di sicurezza è accedere automaticamente (senza l’input dell’utente) al filesystem del suo computer.

Per consentire a js di accedere al fs locale automaticamente è necessario creare un file html con js al suo interno ma un documento hta.

Un file hta può contenere js o vbs al suo interno.

Ma l’eseguibile hta funzionerà solo su sistemi Windows.

Questo è un comportamento standard del browser.

Anche google chrome ha lavorato a fs api, più informazioni qui: http://www.html5rocks.com/en/tutorials/file/filesystem/

Probabilmente lo provi già, digita “false” come segue:

  rawFile.open("GET", file, false); 

Questo potrebbe aiutare,

  var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { alert(xmlhttp.responseText); } } xmlhttp.open("GET", "sample.txt", true); xmlhttp.send(); 
         
Select All