Node.js 文件输入
最近在尝试用 JavaScript (Node.js) 写题。为此,特地看了 ECMAScript 2017 Language Specification(大雾)。写题一般是从文件输入,确切地说是,将 stdin 重定向到文件。在C/C++ 中这可以通过 freopen
函数很方便地实现, 因而想知道 Node.js 是否提供类似的函数。查看 Node.js v6.11.1 API 文档 中关于 Readline 模块(module)的介绍,恰好发现了一个例子:
Example: Read File Stream Line-by-Line
const readline = require('readline');
const fs = require('fs');
const rl = readline.createInterface({
input: fs.createReadStream('sample.txt')
});
rl.on('line', (line) => {
console.log(`Line from file: ${line}`);
});
需要指出,Node.js 的输入输出是通过 Stream 模块实现的,类似于 C++ 中的流。
据此,我实现了将 stdin 重定向到文件:
const readline = require('readline');
const fs = require('fs');
var lines = [], cur = 0;
function cb(err){
const rl = readline.createInterface({input: (err? process.stdin: fs.createReadStream("in.txt"))}).on('line', (line) => {
lines[cur++] = line;
}).on('close', () => {
cur = 0;
main();
});
}
// With the asynchronous methods, there is no guaranteed ordering.
fs.access("in.txt", cb);
function readLine(){
return lines[cur++];
}
function main(){
// ...
}
此法有个问题:无法处理强制在线的情况。
这种方式先把所有输入读进来,存起来;再进行处理。与能否处理强制在线无关。
Node.js 文件输入的更多相关文章
- Node.js文件操作二
前面的博客 Node.js文件操作一中主要是对文件的读写操作,其实还有文件这块还有一些其他操作. 一.验证文件path是否正确(系统是如下定义的) fs.exists = function(path, ...
- Node.js 文件上传 cli tools
Node.js 文件上传 cli tools byte stream 断点续传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- Node.js文件编码格式的转换
项目很多 lua 文件不是 utf-8格式,使用 EditPlus 查看的时候,显示为ASCII.还有的是带BOM的,带BOM倒好处理,之前写过,有一定规律. ASCII编码就比较蛋疼,通过搜索网上资 ...
- Node.js文件操作一
Node.js和其他语言一样,也有文件操作.先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开.关闭.读.写.文件信息.新建删除目录.删除文件.检测文件路径等.在node.js中也是 ...
- Node.js文件上传
Node.js express使用Multer实现文件上传html部分 <div> <h3>文件上传:</h3> 选择一个文件上传: <br/> < ...
- Node.js 文件操作
1.新建一个文件a.txt,并写入"你好,这是一个新文件.". writeFile 代码 demo1.js var fs = require('fs'); console.log( ...
- node.js cmd 输入npm-v无反应
今天安装node,先是提示node版本太低.去官网更新了一下,然后 npm install -g vue-cli 结果出了个"npm ERR! errno -4048" 百度出 这 ...
- Node.js 文件夹目录结构创建
第一次接触NodeJS的文件系统就被它的异步的响应给搞晕了,后来发现NodeJS判断文件夹是否存在和创建文件夹是还有同步方法的,但是还是想尝试使用异步的方法去实现. 使用的方法:fs.exists(p ...
- Linux虚拟机中 Node.js 开发环境搭建
Node.js 开发环境搭建: 1.下载CentOS镜像文件和VMWare虚拟机程序; 2.安装VMWare——>添加虚拟机——>选择CentOS镜像文件即可默认安装带有桌面的Linux虚 ...
随机推荐
- 为DataGridView控件实现复选功能
实现效果: 知识运用: DataGridViewCheckBoxColumn类 实现代码: private class Fruit { public int Price { get; set; } p ...
- 2018.4.27 Java的Swing常用事件
Swing常用事件 1.Java Swing中处理事件的一般步骤是: (1)新建一个组件(JButton) (2)将该组件添加到面板中(JPanel) (3)注册监听器以监听事件源产生的事件(如Act ...
- jsp页面之间传值 以及如何取出url的参数
写项目时往往要写多个页面,而多个jsp之间传值有时是必要的,这时可以用到如下方法: 而在另一个页面取值可以用:${param.xxx} 此处的xxx就是要传递的值
- C#数组删除元素
一.C#数组删除元素 在C#中,只能在动态数组ArrayList类中对数组执行删除元素的操作.因为动态数组是一个可以改变数组长度和元素个数的数据类型. 示例: using System;using S ...
- Codeforces 517 #B
http://codeforces.com/contest/1072/problem/B 开始想的只有搜索,时间复杂度$O(4^n)$,明显有问题. 想了半个小时没有思路,然后想到了正难则反,就开始步 ...
- 编译-LAMP基于fastcgi
前言 最近没更新新篇幅了,今天就来点干活,过多的也不说了下面着手干!干!干! 准备环境 centos7.5 apr-1.6.3.tar.gz apr-util-1.6.1.tar.gz h ...
- asp发送短信验证码 pst方式
<script language="jscript" runat="server"> Array.prototype.get = function ...
- 用Python手把手教你搭建一个web框架-flask微框架!
在之前的文章当中,小编已经教过大家怎么搭建一个Django框架,今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文: 1.flask是 ...
- python 中 * 与**的使用
1.参数中使用如果是函数定义中参数前的*表示的是将调用时的多个参数放入元组中,**则表示将调用函数时的关键字参数放入一个字典中 如定义以下函数 def func(*args): print(args) ...
- Java-framework-Vaadin
安装vaadin: (1) 首先试了maven+vaadin. 安装maven: 1. unzip apache-maven-3.3.9-bin.zip 2. modify PATH environm ...