web前端读取文本文件内容

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读取文件内容代码》,不过那时另外的文章了,以后有空再说喽

时间: 2024-10-12 15:56:17

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

9/23百度web前端开发一面内容

[9/23百度web前端开发一面内容]左定宽  右自适应iframe选择元素arr.reverse  arr浏览器兼容 IE 如何hackpng类型Spritecss选择器优先级  内联 import哪个高垂直居中 文字 和块级元素appcache manifest无法更新 长尾问题性能优化apply call 区别ajax实现 状态码html加载 repaint reflowli换行导致空白问题

php -- 读取文本文件内容

php读取文件内容的三种方法: //**************第一种读取方式***************************** 代码如下: header("content-type:text/html;charset=utf-8");  //告诉php预处理器将内容已utf8的格式传递给浏览器 //文件路径 $file_path="text.txt"; //判断是否有这个文件 if(file_exists($file_path)){ if($fp=fope

web前端优化之内容优化

前端内容优化主要有以下几条: 1.尽量减少http请求 (1)合并文件,把多个css文件合并在一起: (2)css Sprites,把css相关的background元素进行背景图绝对定位: (3)图像地图: (4)使用data:URL scheme在实际的页面嵌入图像数据: 2.减少DNS(Domain Name System,域名系统)查找 DNS查找开销是很大的.对于国内站点来说,过多的使用站外的widget很容易引起更多的DNS查找问题. 3.尽量减少重定向 4.使得ajax可缓存 aj

web前端课程技术内容之如何做一个简单的手机端页面的翻页

[如何做一个简单的手机端页面的翻页] 第一步:创建移动端页面内 HTML + CSS [注]可用弹性布局 但需要注意的是 外层盒子的定位 第二步: 思考问题 要实现怎样的效果? 1. 手指滑动时触发事件[左右]两个方向 2.点击footer部分的下标实现切换效果 3.点击footer部分的下标实现下标颜色变化 第三步:编写JS代码 添加监听事件 document.addEventListener('DOMContentLoaded',function(){ 创建一个数组用于调用数组属性值 或者

关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)

网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属于web前端的技术范畴,要回答清楚这个问题我们要明确下网站应用的本质到底是什么?网站的本质其实就是BS,这里的BS我没有带上架构二字,而就是指Browser和Server即浏览器和服务器,而网站静态化技术的作用目标就是让客户端即浏览器的用户体验更好,但是如果我们想让网站在浏览器上运行的更快,在更快的

【转】关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)

网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属于web前端的技术范畴,要回答清楚这个问题我们要明确下网站应用的本质到底是什么?网站的本质其实就是BS,这里的BS我没有带上架构二字,而就是指Browser和Server即浏览器和服务器,而网站静态化技术的作用目标就是让客户端即浏览器的用户体验更好,但是如果我们想让网站在浏览器上运行的更快,在更快的

Web前端开发的前景与用处

随着时代的发展,现在从事IT方向的人有很多,所以励志要成为前端开发工程师的人有很多.当然也有很多人在犹豫不知道该从事哪个方向,我今天就是来给大家分析一下Web前端开发的前景.包括工作内容,发展前景和薪资待遇等等. 了解这个行业以及发展前景 我觉得呢,一个行业发展前景好不好,数据上的证明总要比口头上的说服要有力的多. 首先在百度词条搜索前端开发出现最多的是“培训”.各种各样的培训,什么“三天速成web大师”,“七天空手敲JavaScript”之类的等等各种培训.反正现在都是这样,什么职业赚钱搞什么

中软卓越web前端班学员就业捷报频传最高月薪13000

在互联网时代,浏览器几乎主宰着一切,而前端开发人员决定着浏览器的内容展现形式和信息的提供,是不可或缺的一部分.web前端开发是最近几年开始火起来的一个岗位,相对于其他的行业相比它还没有达到饱和状态,目前各个企业对于这块的人才稀缺量比较大,而且目前在大学里还没有这个专业课程,只有类似网页设计.网页制作方面的课程,以至于整个行业的人才缺口都非常大.2017年3月份,智联招聘公布的各企业对中软卓越web前端开发培训人才的需求量是4.2万左右,51job公布的web前端开发人才的招聘量是3.7万左右.

web前端的前景

随着时代的发展,现在从事IT方向的人有很多,所以励志要成为前端开发工程师的人有很多.当然也有很多人在犹豫不知道该从事哪个方向,我今天就是来给大家分析一下Web前端开发的前景.包括工作内容,发展前景和薪资待遇等等. 我觉得呢,一个行业发展前景好不好,数据上的证明总要比口头上的说服要有力的多. 首先在百度词条搜索前端开发出现最多的是"培训".各种各样的培训,什么"三天速成web大师","七天空手敲JavaScript"之类的等等各种培训.反正现在都是