How to read text file in JavaScript

JavascriptHtmlText

Javascript Problem Overview


I am trying to load a text file into my JavaScript file and then read the lines from that file in order to get information, and I tried the FileReader but it does not seem to be working. Can anyone help?

function analyze(){
   var f = new FileReader();

   f.onloadend = function(){
	   console.log("success");
   }
   f.readAsText("cities.txt");
}

Javascript Solutions


Solution 1 - Javascript

Yeah it is possible with FileReader, I have already done an example of this, here's the code:

<!DOCTYPE html>
<html>
  <head>
    <title>Read File (via User Input selection)</title>
    <script type="text/javascript">
	var reader; //GLOBAL File Reader object for demo purpose only
	
	/**
     * Check for the various File API support.
	 */
	function checkFileAPI() {
		if (window.File && window.FileReader && window.FileList && window.Blob) {
			reader = new FileReader();
			return true; 
		} else {
			alert('The File APIs are not fully supported by your browser. Fallback required.');
			return false;
		}
	}

	/**
	 * read text input
	 */
	function readText(filePath) {
		var output = ""; //placeholder for text output
		if(filePath.files && filePath.files[0]) {			
			reader.onload = function (e) {
				output = e.target.result;
				displayContents(output);
			};//end onload()
			reader.readAsText(filePath.files[0]);
		}//end if html5 filelist support
		else if(ActiveXObject && filePath) { //fallback to IE 6-8 support via ActiveX
			try {
				reader = new ActiveXObject("Scripting.FileSystemObject");
				var file = reader.OpenTextFile(filePath, 1); //ActiveX File Object
				output = file.ReadAll(); //text contents of file
				file.Close(); //close file "input stream"
				displayContents(output);
			} catch (e) {
				if (e.number == -2146827859) {
					alert('Unable to access local files due to browser security settings. ' + 
					 'To overcome this, go to Tools->Internet Options->Security->Custom Level. ' + 
					 'Find the setting for "Initialize and script ActiveX controls not marked as safe" and change it to "Enable" or "Prompt"'); 
				}
			}		
		}
		else { //this is where you could fallback to Java Applet, Flash or similar
			return false;
		}		
		return true;
	}	
	
	/**
	 * display content using a basic HTML replacement
	 */
	function displayContents(txt) {
		var el = document.getElementById('main'); 
		el.innerHTML = txt; //display output in DOM
	}	
</script>
</head>
<body onload="checkFileAPI();">
	<div id="container">	
		<input type="file" onchange='readText(this)' />
		<br/>
		<hr/>	
		<h3>Contents of the Text file:</h3>
		<div id="main">
			...
		</div>
	</div>
</body>
</html>

It's also possible to do the same thing to support some older versions of IE (I think 6-8) using the ActiveX Object, I had some old code which does that too but its been a while so I'll have to dig it up I've found a solution similar to the one I used courtesy of Jacky Cui's blog and edited this answer (also cleaned up code a bit). Hope it helps.

Lastly, I just read some other answers that beat me to the draw, but as they suggest, you might be looking for code that lets you load a text file from the server (or device) where the JavaScript file is sitting. If that's the case then you want AJAX code to load the document dynamically which would be something as follows:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />
<title>Read File (via AJAX)</title>
<script type="text/javascript">
var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');

function loadFile() {
	reader.open('get', 'test.txt', true); 
	reader.onreadystatechange = displayContents;
	reader.send(null);
}

function displayContents() {
	if(reader.readyState==4) {
		var el = document.getElementById('main');
		el.innerHTML = reader.responseText;
	}
}

</script>
</head>
<body>
<div id="container">
	<input type="button" value="test.txt"  onclick="loadFile()" />
	<div id="main">
	</div>
</div>
</body>
</html>

Solution 2 - Javascript

This can be done quite easily using javascript XMLHttpRequest() class (AJAX):

function FileHelper()

{
	FileHelper.readStringFromFileAtPath = function(pathOfFileToReadFrom)
	{
		var request = new XMLHttpRequest();
		request.open("GET", pathOfFileToReadFrom, false);
		request.send(null);
		var returnValue = request.responseText;

		return returnValue;
	}
}

...

var text = FileHelper.readStringFromFileAtPath ( "mytext.txt" );

Solution 3 - Javascript

Javascript doesn't have access to the user's filesystem for security reasons. FileReader is only for files manually selected by the user.

Solution 4 - Javascript

my example

<html>

<head>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
  <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
  <script src="http://code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
</head>

<body>
  <script>
    function PreviewText() {
      var oFReader = new FileReader();
      oFReader.readAsDataURL(document.getElementById("uploadText").files[0]);
      oFReader.onload = function(oFREvent) {
        document.getElementById("uploadTextValue").value = oFREvent.target.result;
        document.getElementById("obj").data = oFREvent.target.result;
      };
    };
    jQuery(document).ready(function() {
      $('#viewSource').click(function() {
        var text = $('#uploadTextValue').val();
        alert(text);
        //here ajax
      });
    });
  </script>
  <object width="100%" height="400" data="" id="obj"></object>
  <div>
    <input type="hidden" id="uploadTextValue" name="uploadTextValue" value="" />
    <input id="uploadText" style="width:120px" type="file" size="10" onchange="PreviewText();" />
  </div>
  <a href="#" id="viewSource">Source file</a>
</body>

</html>

Solution 5 - Javascript

(fiddle: https://jsfiddle.net/ya3ya6/7hfkdnrg/2/ )

  1. Usage

Html:

<textarea id='tbMain' ></textarea>
<a id='btnOpen' href='#' >Open</a>

Js:

document.getElementById('btnOpen').onclick = function(){
    openFile(function(txt){
        document.getElementById('tbMain').value = txt; 
    });
}
  1. Js Helper functions
function openFile(callBack){
  var element = document.createElement('input');
  element.setAttribute('type', "file");
  element.setAttribute('id', "btnOpenFile");
  element.onchange = function(){
      readText(this,callBack);
      document.body.removeChild(this);
      }

  element.style.display = 'none';
  document.body.appendChild(element);

  element.click();
}

function readText(filePath,callBack) {
    var reader;
    if (window.File && window.FileReader && window.FileList && window.Blob) {
        reader = new FileReader();
    } else {
        alert('The File APIs are not fully supported by your browser. Fallback required.');
        return false;
    }
    var output = ""; //placeholder for text output
    if(filePath.files && filePath.files[0]) {           
        reader.onload = function (e) {
            output = e.target.result;
            callBack(output);
        };//end onload()
        reader.readAsText(filePath.files[0]);
    }//end if html5 filelist support
    else { //this is where you could fallback to Java Applet, Flash or similar
        return false;
    }       
    return true;
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCRSView Question on Stackoverflow
Solution 1 - JavascriptbcmoneyView Answer on Stackoverflow
Solution 2 - Javascriptuser3375451View Answer on Stackoverflow
Solution 3 - JavascriptMelibornView Answer on Stackoverflow
Solution 4 - JavascriptwebskyView Answer on Stackoverflow
Solution 5 - JavascriptyayaView Answer on Stackoverflow