node 学习笔记 - fs 文件操作

news/2024/7/19 11:58:10 标签: php, 爬虫

本文同步自我的个人博客:http://www.52cik.com/2015/12/03/learn-node-fs.html

最近看到群里不少大神都开始玩 node 了,我感觉跟他们步伐越来越大了,
为了追逐他们的步伐,必须把 node 技能 get 起来。

hello world!

node 这货,接触也有快2年了吧,不过1年前才开始用,仅仅是用而已。
因为那时候接触 grunt 以及后来的 gulp 然后渐渐的熟悉了 node。
当时的 node 官网,首页就是一个简单的 http 例子。

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

当然现在也是这个例子,只是没放首页。
其实我当时是不感冒的,因为对于phper来说,。。。算了,不扯则个了。
反正当时只是为了用 grunt/gulp 而已,其他都无所谓。

入门

虽然之前也断断续续打算学,但是都没用下决心,往往是看一下,就不看了。
以至于到现在连自己写 gulp 都不会,只会各种复制黏贴。
这次是真的下决心学习了,哪怕慢慢学,也要坚持学习下去。

跟着网上教程走,第一篇是 process 的一些操作,我觉得除了 process.argv 获取命令行参数, process.env 获取环境变量,其他不太常用,至少我现阶段用不到,所以只是简单的测试了下,就直接到了 File System 部分。

fs 是文件操作,我之前写爬虫,以及最后的文件数据整理,都是 php 做的,现在学了 node 之后肯定尽量 node 上了。
下面我就简单记录下常用的方法,反正用法,中文文档,百度上满大街都是。

结合 File System 官网文档来学习。

Sync 后缀方法

打开文档发现每个方法都有两个,其中有一个就多了个 Sync 后缀。
什么是同步异步,事件驱动,非阻塞I/O 这些学术性的东西我就不多说了,自行搜索,这里只说他们最明显的区别。
比如 fs.renamefs.renameSync,前者是要传入回调参数,当完成或遇到错误后会执行回调函数,而 Sync 同步方法,如果遇到错误了,直接抛出,导致js中断。

fs.rename('123.txt', '321.txt', function (err) {
  if (err) {
    console.log(err); // 遇到错误
  }
  console.log('完成');
});
try {
  fs.renameSync('123.txt', '321.txt');
  console.log('完成');
} catch(err) {
  console.log(err); // 遇到错误
}

就是这么个区别,一个和谐报错,一个要手动 catch 错误信息。

文件读写

fs.read, fs.writefs.readFile, fs.writeFile, fs.appendFile 前者比较底层,需要结合 fs.open 打开文件得到文件句柄,然后基于文件句柄读写。
这不是很常用,所以直接说 fs.readFile, fs.writeFile, fs.appendFile 这三个方便的。

var fs = require('fs');

// 写入数据, 文件不存在会自动创建
fs.writeFile('123.txt', 'Hello Node!', function (err) {
  if (err) throw err;
  console.log('写入完成');
});

// 添加数据
fs.appendFile('123.txt', '添加数据,默认 utf8 格式', function (err) {
  if (err) throw err;
  console.log('添加完成');
});

// 读取数据
fs.readFile('123.txt', function (err, data) {
  if (err) throw err;
  console.log(data.toString());
});

好了,简洁明了,写入,添加,读取,都OK了。

不过我想大家也会跟我一样会有个疑问,fs.readFile 是全部载入,那如果文件很大怎么破?
而且没有按行读取,很多情况下会很麻烦。

这个就之后 Stream 部分细说了。

转载于:https://www.cnblogs.com/52cik/p/learn-node-fs.html


http://www.niftyadmin.cn/n/515891.html

相关文章

java watir_Java教程Selenium Java 页面元素定位

自动化测试常用操作1、定位网页上的元素,并存储到一个变量中;2、对变量进行操作,比如点击或输入文字;3、设定页面元素的操作值;二、定位方法汇总,拉勾IT课小编为大家分析,该元素的技术。2.1 fin…

C++11 std::copy

这个函数并不是简单的 while(first ! last) {*result *first;result;first; } 事实上这种写法是最具普适性的,值要求inputIterator是输入迭代器,outputIterator是输出迭代器 可以想像我们熟悉的链表,vector之类的迭代器都是满足要求的。但…

java newinstance 数组_在Java中使用Array.newInstance创建整数数组

java.lang.reflect.Array.newInstance(Class componentType,int length)方法形成一个新数组,该数组具有参数中指定的组件类型和长度声明-java.lang.reflect.Array.newInstance(Class componentType,int length)方法声明如下-public static Ob…

leetcode Triangle

题目连接 https://leetcode.com/problems/triangle/ Triangle Description Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below. For example, given the following triangle [ [2], [3,4], [6,…

mysql+5.7+json+长度_MySQL5.7.8 JSON

Mysql从5.7.8版本开始原生支持JSON(JavaScript Object Notation)类型。确切的是MySQL 5.7.7 labs版本开始InnoDB存储引擎已经原生支持JSON格式,该格式不是简单的BLOB类似的替换。优点如下:1、自动验证存储在JSON列中的JSON文档。无效的文档产生错误。2、…

php 数组转json格式

1、php若为关系数组:转化为由花括号包围的对象: 输入:$test array("1">1,"2">2,"3">3); 输出: {"1":1,"2":2,"3":3} 2、php若为普通数组:转化…

mysql能支持多少数据类型_Mysql支持的数据类型

一.数值类型Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。扩展后增加了TINYINT,MEDIUMINT,BIGINT这3种长度不同的整形&#x…

Web基础架构:负载均衡和LVS

在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库、缓存等等)。 一、负载均衡的作用…