html5+js实现,参照xxyy888的CSDN博客文章《使用HTML+javascrpt读取txt文本文件》失败,将作者文章中的代码重新整理了下依然不行,文章代码存在的问题是括号错误,基本上都是弄成了全角字符,整理后的代码如下,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>JS操作文本文件</title>
</head> <body> <script language="javascript">
var arr = new Array();
arr[0] = [0, "name0", "value0"];
arr[1] = [1, "name1", "value1"];
arr[2] = [2, "name2", "value2"];
arr[3] = [3, "name3", "value3"];
arr[4] = [4, "name4", "value4"]; function Write2Text(){
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.CreateTextFile("a.txt",2,true);
for(
var i = 0; i < arr.length; i++) {
f.write(arr[i])
f.WriteBlankLines(1)
} f.Close(); }
</script>
<input type=button value="Write" onclick="Write2Text()"> <script language="javascript">
function GetHeader(src){
var ForReading = 1;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile(src,ForReading,true);
return(f.ReadAll());
} function ReadText(){
var arr = GetHeader("C:\\wamp\\www\\rw_txt\\spectest.txt").split("\r\n");
for(
var i = 0; i < arr.length; i++) {
alert("第" + (i + 1) + "行数据为:" + arr[i]);
}
/* while(!f.AtEndOfStream) {
f.Readline();
}*/
}
</script> <input type=button value="Read" onclick="ReadText()"> </body> </html>

  

效果为

但是如何点击两个按钮都没反应,查了很多地方也没高太懂,于是继续参考另一个博主逆世风灵的博客《HTML5的FileReader API在浏览器中一行行的读取本地文本文件》,作者只是提到了一个html和一个js文件,其实隐含了一个jquery.js文件,通过代码找到了这么个文件,使用Hbuilder轻松添加至项目目录。

index.html代码

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>单行读文本</title>
</head> <body>
<input type="file" id="file">
<button id="read">Read</button> <pre id="output"></pre> <script src="./jquery-1.11.1.js"></script>
<script src="./Reader.js"></script>
<script>
$(function() {
var lr = new LineReader(); //文件块chunkSize 默认1024B,可以自己设置大小new LineReader({chunkSize: 1}) $('#read').click(function() {
var file = $('#file').get(0).files[0];
var totalCount = 1;
var $output = $('#output'); lr.on('line', function(line, next) {
$output.text($output.text() + '\n' + totalCount + ': ' + line); totalCount++; /**
* 模拟某种形式的异步操作
*/
setTimeout(function() {
next();
}, 100);
}); lr.on('error', function(err) {
console.log(err);
}); lr.on('end', function() {
console.log('Read complete!');
}); lr.read(file);
}); });
</script>
</body> </html>

  

Reader.js代码

var LineReader = function(options) {

	if(!(this instanceof LineReader)) {
return new LineReader(options);
} var internals = this._internals = {};
var self = this; internals.reader = new FileReader(); internals.chunkSize = (options && options.chunkSize) ? options.chunkSize : 1024; /**
* 让我们创建一个对象来让用户定义的事件回调
*/
internals.events = {}; /**
* 'canRead' 将被设置为false,如果在的FileReader#中止方法被触发
*/
internals.canRead = true; internals.reader.onload = function() { internals.chunk += this.result; /**
*如果处理的文本包含一个换行符
*/
if(/\r|\n/.test(internals.chunk)) {
/**
* 拆分文本行的数组
*/
internals.lines = internals.chunk.match(/[^\r\n]+/g); /**
*如果仍有更多的数据读取,保存最后一行,因为它可能是不完整的
*/
if(self._hasMoreData()) {
/**
* 如果装入块以\n换行符结束,最后一行是完整的,我们并不需要存储它
*/
internals.chunk = internals.chunk[internals.chunk.length - 1] === '\n' ?
'' :
internals.lines.pop();
} self._step(); /**
*如果文本不包含换行符
*/
} else { /**
* 启动新一轮的读取过程,如果还有读取数据
*/
if(self._hasMoreData()) {
return self.read();
} /**
* 如果没有数据剩下被读取,但仍然有存储在“块”的数据,发出它作为一行
*/
if(internals.chunk.length) {
return self._emit('line', [
internals.chunk,
self._emit.bind(self, 'end')
]);
} /**
* 如果没有存储在“块”的数据,发出结束事件
*/
self._emit('end');
}
}; internals.reader.onerror = function() {
/**
* 发出错误事件,沿着错误对象给回调传递“这”指针“的FileReader”实例
*/
self._emit('error', [this.error]);
};
}; /**
*事件绑定
* @eventName- 绑定到事件的名称
* @ - 当事件触发执行函数
*/
LineReader.prototype.on = function(eventName, cb) {
this._internals.events[eventName] = cb;
}; LineReader.prototype.read = function(file) {
var internals = this._internals; /**
* 如果“文件”是定义有效的,那么我们希望得到一些关于它的信息和重置 'readPos', 'chunk', and 'lines'
*/
if(typeof file !== 'undefined') {
internals.file = file;
internals.fileLength = file.size;
internals.readPos = 0;
internals.chunk = '';
internals.lines = [];
} /**
* 提取该文件的部分用于阅读开始 'readPos' and 结束于 'readPos + chunkSize'
*/
var blob = internals.file.slice(internals.readPos, internals.readPos + internals.chunkSize); /**
* 更新当前读取位置
*/
internals.readPos += internals.chunkSize; /**
* 阅读blob 作为 文本
*/
internals.reader.readAsText(blob, "UTF-8");
}; /**
* 停止读取过程
*/
LineReader.prototype.abort = function() {
this._internals.canRead = false;
}; /**
* LineReader#_step
*
* Internal:获取下一行并发送它作为一个`line`事件
*/
LineReader.prototype._step = function() {
var internals = this._internals; /**
* 如果没有行剩下发送,但仍有数据剩下被读取,
*再次启动读进程,否则发送“结束”事件
*/
if(internals.lines.length === 0) {
if(this._hasMoreData()) {
return this.read();
}
return this._emit('end');
} /**
* 如果读数进程尚未终止,发送的第一元素在行数组,并在用户通过_step“ 准备调用下一行。我们必须绑定“_step'到'this',
*否则这将是在错误的范围内调用它
*/
if(internals.canRead) {
this._emit('line', [
internals.lines.shift(),
this._step.bind(this)
]);
} else {
/**
*如果我们不能读,发出“结束”事件
*/
this._emit('end');
}
}; /**
* Internal: 确定是否还有更多的数据读取。
*/
LineReader.prototype._hasMoreData = function() {
var internals = this._internals;
return internals.readPos <= internals.fileLength;
}; /**
*处理事件的发送
* @ - 发生事件的名称
* @ - 参数数组来发送到事件回调函数
*/
LineReader.prototype._emit = function(event, args) {
var boundEvents = this._internals.events; /**
* 如果用户已经绑定请求事件
*/
if(typeof boundEvents[event] === 'function') {
/**
* Use apply to ensure correct scope, and pass in the 'args' array to
* be used as arguments for the callback 使用apply确保正确的范围,传递'args'数组作参数用于为回调
*/
boundEvents[event].apply(this, args);
}
};

  

jquery-1.11.1.js的代码

一万多行,,,

迷你版本的看看

。。。也三千多行,算了这里不张贴了,网上一搜一大堆

最后的效果为

做完之后,想到其实自己希望实现将读取的文件存储成数组之类,查询了下,php在这方面比较强,可以参考文章《PHP读取文件内容代码》,不过那时另外的文章了,以后有空再说喽

web前端读取文本文件内容的更多相关文章

  1. java读取文本文件内容2

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/183 很久之前写了一篇Java读取文本文件内容,链接地址是 ...

  2. java读取文本文件内容

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/128 java读取文本文件内容 今天写代码写着要调试一个很 ...

  3. web前端开发学习内容

    应该 具备的 知识技能 :懂web标准,熟练手写 xhtml css3 并符合 符合w3c标准                       代码能 兼容主流浏览器.ie6.7.8.9 ff 等.    ...

  4. [转] Web前端优化之 内容篇

    原文网址: http://lunax.info/archives/3090.html Yahoo! 的 Exceptional Performance team 在 Web 前端方面作出了卓越的贡献. ...

  5. php -- 读取文本文件内容

    php读取文件内容的三种方法:    //**************第一种读取方式*****************************  代码如下: header("content- ...

  6. web前端优化之内容优化

    前端内容优化主要有以下几条: 1.尽量减少http请求 (1)合并文件,把多个css文件合并在一起: (2)css Sprites,把css相关的background元素进行背景图绝对定位: (3)图 ...

  7. 自动判断文本文件编码来读取文本文件内容(.net版本和java版本)

    .net版本 using System; using System.IO; using System.Text; namespace G2.Common { /// <summary> / ...

  8. C++ 读取文本文件内容到结构体数组中并排序

    成绩排行:从Score.txt文件读取学生信息,对其进行排序,按回答题数从大到小排,若相等,按分数从小到大排 #include<iostream> #include<fstream& ...

  9. js前端读取文件内容

    方法1:原生 <input type="file" name="file" id="file" onchange="jsRe ...

随机推荐

  1. AOJ.502 不只是水仙花

    不只是水仙花 Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB Total Submission: 1196 Submi ...

  2. JQuery队列queue与原生模仿其实现

    jQuery中的queue和dequeue是一组很有用的方法,他们对于一系列需要按次序运行的函数特别有用.特别animate动画,ajax,以及timeout等需要一定时间的函数. queue() 方 ...

  3. 这次OpenSSL HeartBleed漏洞是怎么一回事呢?

    “心脏出血”(Heartbleed)被称为互联网史上最严重的安全漏洞之一,波及了大量常用网站.服务,包括很多人每天都在用的 Gmail 等等,可能导致用户的密码.信用卡轻易泄露.但是我们可能对它还不是 ...

  4. oracle与mysql的group by语句

    之所以去纠那么细节的问题,是因为之前有过一个这样的场景: 有个同学,给了一条数据库的语句给我,问,为啥这样子的语句在oracle语句下执行不了. 1 select * from xx where xx ...

  5. The base command for the Docker CLI.

    Description The base command for the Docker CLI. Child commands Command Description docker attach At ...

  6. AWS文档与用户指南

    AWS Command Line Interface http://docs.amazonaws.cn/cli/latest/userguide/cli-chap-welcome.html VM Im ...

  7. Drac6-Web界面无法访问

    1. ssh idracip, and reset RAC -- will need around 10mins /admin1-> racadm racreset RAC reset oper ...

  8. php spl库的使用(PHP标准库)【摘抄引用】

    文章来源与推荐阅读:阮一峰--PHP SPL笔记  &&  PHP SPL使用方法和他的威力 1.SPL 是什么? SPL:standard php library php标准库,此 ...

  9. The 'brew link' step did not complete successfully

    在mac 上更新node时遇到了一系列的问题: 卸载node重新安装之后提示: The 'brew link' step did not complete successfully 其实这里已经给出了 ...

  10. 动态规划&字符串:最长公共子串

    还是直接上转移方程: 动规只能解决O(n^2)的最长公共子串问题 使用后缀数组或者SAM可以高效地解决这个问题 所以,对于这个问题,动规的代码就不给出了 直接给出SAM的实现,也为以后学习SAM打下一 ...