本文同步自我的个人博客: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 部分细说了。

node 学习笔记 - fs 文件操作的更多相关文章

  1. node学习笔记3——文件操作fs

    文件操作关键字: http('fs') ——  请求 node 里面的 http 模块 readFile ——  读文件,参数包括 文件名,回调函数 writeFile ——  写文件,参数包括 文件 ...

  2. 【java学习笔记】文件操作

    文件操作 java.io.File ①创建删除文件及目录 ②查看文件及目录属性 ③文件过滤器 (PS:不包括文件读写数据) 1.单个文件 创建单个文件,查看属性,删除单个文件. package tmp ...

  3. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

  4. Java 学习笔记(14)—— 文件操作

    java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java.io 包中.Java中流可以理解为一个有序的字符序列,从一端导向到另一端.建立了一个流 ...

  5. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  6. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  7. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  8. python的学习笔记01_5文件操作

    一,文件操作基本流程. 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...

  9. C++ 学习笔记之——文件操作和文件流

    1. 文件的概念 对于用户来说,常用到的文件有两大类:程序文件和数据文件.而根据文件中数据的组织方式,则可以将文件分为 ASCII 文件和二进制文件. ASCII 文件,又称字符文件或者文本文件,它的 ...

随机推荐

  1. 读书笔记——数据库的ADO开发总结

    基本上是对 ADO+开发指南.pdf 的摘抄和总结,以及个人心得. 文章末尾有<ADO+开发指南.pdf>的资源下载,附带个人批注. --------------------------- ...

  2. android:layout_gravity和android:gravity的区别

    1.首先来看看android:layout_gravity和android:gravity的使用区别. android:gravity: 这个是针对控件里的元素来说的,用来控制元素在该控件里的显示位置 ...

  3. java Timer(定时调用、实现固定时间执行)

    最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...

  4. Java 集合介绍

    1, Set :集合中对象不按特定的方式排序,并且没有重复对象,它有些实现类能对集合按特定方式排序 List :集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索独享,Li ...

  5. 嵌入式Linux应用程序开发详解------(创建守护进程)

    嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...

  6. 备忘:文本编辑器(z.B. Sublime Text 2)策略,git策略

    1.以Sublime Text 2 为例: 新建一个test.py文件,敲完例程 代码 之后,再另存为比如 if.py, list_tuple.py云云 而test.py可以一直用来编辑 2.git ...

  7. mac 免密码登陆服务器

    由于mac os 是基于unix的操作系统终端和linux非常类似,所以不用借助类似于windows下的putty 和CRT工具即可远程登陆linux服务器,只需简单地3步即可免密码ssh远程. 1 ...

  8. DB String Split sample

    以sqlserver为例进行说明,代码稍加修改,可以用于ORACLE. 字符串的拆分和聚合是数据库开发人员比较常见的任务. 关于字符串的聚合和拆分,sqlserver的标准解决方案是for xml p ...

  9. 《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP

    1.一个物理层的网络,例如以太网,可以同时被多个不同的网络层所使用.例如网络中的一些主机使用TCP/IP协议,其他主机使用其他的网络协议. 2.设备驱动软件从不关心IP数据报中的目的IP地址.这也是为 ...

  10. C++基础笔记(二)C++对C的扩展

    Xcode创建C++项目 1.新建一个MAC工程(command line tool) 2.导入头文件 3.修改文件后缀(*.m-->*.mm) 4.修改主函数中的OC代码为C++的代码   动 ...