【问题标题】:Reading a text file using Javascript使用 Javascript 读取文本文件
【发布时间】:2018-04-11 12:48:42
【问题描述】:

下面的代码应该在加载时读取当前目录中的文本文件的内容,并将其显示在html页面上。我尝试自己修改。但它没有给出输出。有没有更简单的方法来使用另一种方法来获得这个结果?或者请帮助找出这段代码有什么问题?

<html>
        <head>
            <meta http-equiv='Content-type' content='text/html;charset=UTF-8' >
            <script>
    function startRead()
    {
      // obtain input element through DOM 

    var file = document.getElementById("\\file.txt").files[0]

      if(file)
        {
        getAsText(file);
      }
    }

    function getAsText(readFile)
    {
        var reader;
        try
        {
        reader = new FileReader();
        }catch(e)
        {
            document.getElementById('output').innerHTML = 
                "Error: seems File API is not supported on your browser";
          return;
      }

      // Read file into memory as UTF-8      
      reader.readAsText(readFile, "UTF-8");

      // Handle progress, success, and errors

      reader.onload = loaded;
      reader.onerror = errorHandler;
    }



    function loaded(evt)
    {
      // Obtain the read file data    
      var fileString = evt.target.result;
      document.getElementById('output').innerHTML = fileString;
    }

    function errorHandler(evt)
    {
      if(evt.target.error.code == evt.target.error.NOT_READABLE_ERR)
        {
        // The file could not be read
            document.getElementById('output').innerHTML = "Error reading file..."
      }
    }
    //Start reading file on load
    window.addEventListener("load", startRead() { }, false);

            </script>
        </head>

        <body>

            <pre>
                <code id="output">
                </code>
            </pre>
        </body>
    </html>

下面给出的是我修改以获得上述代码的代码。我的意图是。当我打开 html 文件时,它会读取当前目录中的文本文件并显示内容。

<html>
    <head>
        <meta http-equiv='Content-type' content='text/html;charset=UTF-8' >
        <script>
function startRead()
{
  // obtain input element through DOM 

var file = document.getElementById("file").files[0];

  if(file)
    {
    getAsText(file);
  }
}

function getAsText(readFile)
{
    var reader;
    try
    {
    reader = new FileReader();
    }catch(e)
    {
        document.getElementById('output').innerHTML = 
            "Error: seems File API is not supported on your browser";
      return;
  }

  // Read file into memory as UTF-8      
  reader.readAsText(readFile, "UTF-8");

  // Handle progress, success, and errors

  reader.onload = loaded;
  reader.onerror = errorHandler;
}



function loaded(evt)
{
  // Obtain the read file data    
  var fileString = evt.target.result;
  document.getElementById('output').innerHTML = fileString;
}

function errorHandler(evt)
{
  if(evt.target.error.code == evt.target.error.NOT_READABLE_ERR)
    {
    // The file could not be read
        document.getElementById('output').innerHTML = "Error reading file..."
  }
}
        </script>
    </head>

    <body>
        <input id="file" type="file" multiple onchange="startRead()">
        <pre>
            <code id="output">
            </code>
        </pre>
    </body>
</html>

【问题讨论】:

  • Java与JavaScript无关
  • document.getElementById("\\file.txt") 在您的文档中不存在,因此当您尝试从中读取时会遇到异常。查看您的 JavaScript 控制台。
  • 此document.getElementById("\\file.txt").files[0] 行是否获取任何元素。我不这么认为。想在这里做什么?
  • "load", startRead() { }, false 是语法错误,因此当您尝试编译该代码时会出现异常。查看您的 JavaScript 控制台。
  • 下面的代码 sn-p 与上面的代码不同吗?

标签: javascript html text-files


【解决方案1】:

试试这个sn-p,我刚试过,它有效:)!

Live Demo (With Input File)

var fileInput = document.getElementById('fileInput');
var fileDisplayArea = document.getElementById('fileDisplayArea');

fileInput.addEventListener('change', function(e) {
    var file = fileInput.files[0];
    var textType = /text.*/;
    
    if (file.type.match(textType)) {
        var reader = new FileReader();
        
        reader.onload = function(e) {
            var content = reader.result;
            //Here the content has been read successfuly
            alert(content);
        }
        
        reader.readAsText(file);	
    } else {
        fileDisplayArea.innerText = "File not supported!"
    }
});
&lt;input type="file" id="fileInput"&gt;

无输入文件

功能

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

测试一下

<a href="#" onclick="readTextFile(&quot;file:///C:/test.txt&quot;)"> Test </a>

注意:我试过了,但它只在firefox中有效

【讨论】:

  • 我是 JavaScript 新手。我应该把什么作为输入文件ID?它是文件路径吗?它有特定的格式吗?
  • 我添加了一个现场演示的链接,看看:)! @眼镜蛇
  • 我刚试过,但没有输出:/ @Assa
  • 你试过现场演示吗?你用的是哪个浏览器?
  • 是的,我试过了,但没有输出。我正在使用 Mozilla Firefox 37.0.1 版,我也刚刚在 chrome 上尝试过,结果相同。
【解决方案2】:

<html>

<head></head>

<body>

  <input type="file" id="openfile" />

  <br>
  <pre id="filecontents"></pre>
  <script type="text/javascript">
    document.getElementById("openfile").addEventListener('change', function() {
      var fr = new FileReader();
      fr.onload = function() {
        document.getElementById("filecontents").textContent = this.result;
      }
      fr.readAsText(this.files[0]);
    })
  </script>
</body>
</html>

此代码有效

    <script type="text/javascript">

     document.getElementById("openfile").addEventListener('change', function(){


            var fr= new FileReader();
            fr.onload= function(){

                        document.getElementById("readfile").textContent=this.result;

            }

            fr.readAsText(this.files[0]);


     })

    </script>

【讨论】:

    【解决方案3】:
    <html>
      <head>
        <title>reading file</title>
       </head>
    <body>
    

    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);
      }
    });
    <input type="file" id="myFile">
    <hr>
    <textarea style="width:500px;height: 400px" id="output"></textarea>
    <input type="file" id="myFile">
    <hr>
    <!--<div style="width: 300px;height: 0px" id="output"></div>-->
    <textarea style="width:500px;height: 400px" id="output"></textarea>
    
    <script>
    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);
      }
    });
    </script>
      </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多