【nodejs学习】1.文件操作

1.小文件拷贝,使用nodejs内置模块

var fs = require(‘fs‘);

function copy(src, dst){

fs.writeFileSync(dst, fs.readFileSync(src));

}

function main(argv){

copy(argv[0], argv[1]);

}

main(process.argv.slice(2));

解释:process是一个全局变量,可通过procress.argv获得命令行参数,argv[0]固定等于nodejs执行程序绝对路径,argv[1]主模块绝对路径,argv[2]命令行参数.

对于大文件,内存有限制,则应该修改为:

fs.createReadStream(src).pipe(fs.createWriteStream(dst));

两个数据流,pipe把两个流连接起来了

2.API

1)Buffer:与String对等的全局构造函数Buffer来提供对二进制数据的操作。可以直接构造

var bin = new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]);

可以使用.length获取字节长度,可以使用[index]方式读取指定的字节:bin[0]

转化为字符串:

var str = bin.toString(‘utf-8‘);//hello

var bin = new Buffer(‘hello‘,‘utf-8‘);//<Buffer 68 65 6c 6c 6f>

字符串是只读的,Buffer是可以更改的,像数组一样。

.slice不是返回一个新的Buffer,而是返回指向Buffer某个位置的指针。

var bin = new Buffer([0x68, 0x65, 0x6c, 0x6c, 0x6f]);

var dup = new Buffer(bin.length);

bin.copy(dup);

dup[0] = 0x48;

console.log(bin);//<Buffer 68 65 6c 6c 6f>

console.log(dup);//<Buffer 48 65 65 6c 6f>

2)Stream数据流

var rs = fs.createReadStream(src);

rs.on(‘data‘, function(chunk){

rs.pause();

doSomeThing(chunk, function(){

rs.resume();

});

});

rs.on(‘end‘, function(){

cleanUp();

});

var rs = fs.createReadStream(src);

var ws = fs.createWriteStream(dst);

rs.on(‘data‘, function(chunk){

if(ws.write(chunk) === false){

rs.pause();

}

});

rs.on(‘end‘, function(){

ws.end();

});

ws.on(‘drain‘, function(){

rs.resume();

});

注:这种场景应用很多,因此,提供了.pipe方法来做,其中内部实现与上述方法类似。

3)文件系统

文件属性读写:fs.stat,fs.chmod,fs.chown

文件内容读写:fs.readFile,fs.readdir,fs.writeFile,fs.mkdir

底层文件操作:fs.open,fs.read,fs.write,fs.close

nodejs最精华的异步IO在fs中有体现:

fs.readFile(pathname, function(err, data){

if(err){

//deal with err

}else{

//deal with data

}

});

在fs模块的所有异步操作都有同步版本的API,后面都加了一个Sync,异常对象与执行结果的传递方式也有相应变化。例:

try{

var data = fs.readFileSync(pathname);

//deal with data

}catch(err){

//data with error

}

4)Path

path.normalize:将传入个路径转换成标准路径,去掉.与..,去掉多余\,例如:

var cache = {};

function store(key, value){

cache[path.normalize(key)] = value;

}

store(‘foo/bar‘, 1);

store(‘foo//baz//../bar‘, 2);

console.log(cache);//=>{"foo/bar":2}

path.join:将传入的多个路径拼接为标准路径

path.join(‘foo/‘,‘baz/‘,‘../bar‘);//=>"foo/bar"

path.extanme:获取文件名扩展名

5)遍历目录

function travel(dir, callback){

fs.readdirSync(dir).forEach(function(file){

var pathname = path.join(dir, file);

if(fs.statSync(pathname).isDirectory()){

travel(pathname, callback);

}else{

callback(pathname);

}

});

}

//遍历目录异步版本,这一个我还需要好好理解,请指教

function travel(dir, callback, finish){

fs.readdir(dir, function(err, files){

(function next(i){

if(i<files.length){

var pathname = path.join(dir, files[i]);

fs.stat(pathname, function(err, stats){

if(stats.isDirectory()){

travel(pathname, callback, function(){

next(i+1);

});

}else{

callback(pathname, function(){

next(i+1);

});

};

});

}else{

finish && finish();

}

}(0));

})

}

3.文本编码

FE FF       :UTF16BE

FF FE       :UTF16LE

EF BB BF  :UTF8

识别和去除UTF8 BOM的功能

function readText(pathname){

var bin = fs.readFileSync(pathname);

if(bin[0] === 0xEE && bin[1] === 0xBB && bin[2] === 0xBF){

bin = bin.slice(3);

}

return bin.toString(‘utf-8‘);

}

GBK转UTF8

var iconv = require(‘iconv-lite‘);

function readGBKText(pathname){

var bin = fs.readFileSync(pathname);

return iconv.decode(bin, ‘gbk‘);

}

单字节编码

function replace(pathname){

var str = fs.readFileSync(pathname, ‘binary‘);

str = str.replace(‘foo‘, ‘bar‘);

fs.writeFileSync(pathname, str, ‘binary‘);

}

附录:

UTF8 BOM: Byte Order Mark,字节序标记,EF BB BF

时间: 2024-08-10 19:20:58

【nodejs学习】1.文件操作的相关文章

linux学习(2)文件操作

pwd 显示当前目录 touch 创建空白文件或者更新已有文件的时间 .开头的文件为隐藏文件 列出目录内容 ls -a 显示所有文件 包括隐藏文件 ls -r 显示详细信息 ls -R 显示子目录的结构 ls -ld显示目录和链接的信息 file查看文件的类型 cd 切换目录 复制 cp 源文件 目标文件(目录) 复制文件夹 cp -r 源文件夹 目标文件夹 显示复制的详细信息 cp -v 移动 mv 文件 目标目录 移动并且修改文件名 mv 文件 目标目录/文件名 重命名 mv 文件 文件名

PHP学习笔记-文件操作1

转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/52294237 本文出自:[顾林海的博客] 前言 PHP支持文件上传功能,因此学习PHP文件的相关操作是必须的,这篇笔记会去记录PHP文件系统的相关知识. 文件打开与关闭 文件处理包括读取.关闭.重写等,例如,访问一个文件需要3步:打开文件.读写文件和关闭文件.其他的操作要么是包含在读写文件中(如显示内容.写入内容等),要么与文件自身的属性有关系(如文件遍历.文件改名等

Python学习之--文件操作

Python中对文件操作可以用内置的open()函数 读文件 f=open('/home/test/test.txt','r') # 读模式打开文件 f.read() # 读取文件内容 除了正常的读取文件内容,一个常用的操作是判断文件内容是否为空,如下: if len(f.read())==0: # 如果文件内容为空 xxxx 判断一个文件或者路径是否存在,如下(这里需要在代码中导入os module: import os): file='/home/test/test.txt' dir='/h

Python学习日记---文件操作

与文件操作有关函数: 1.打开一个文件open("文件名","打开方式") 打开方式归类: 模式 打开方式 文件存在 文件不存在 r 只读 打开文件 报错 w 只写 清空文件并打开 创建并打开 a 只写 打开并追加 创建并打开 r+ 读写 从文件开始读,或重写 报错 w+ 读写 清空并打开 创建并打开 a+ 读写 打开并追加 创建并打开 范例: iword.txt文件内容 First word Second word threed word oword.txt文件内

&lt;学习笔记&gt;文件操作篇

文件操作用到的函数: #include <stdio.h> fopen(FILE* fp): 文件打开函数: 1.打开成功返回当前文件所处的地址值:2.打开失败返回一个空指针"NULL"; 常用方法:if((fp=fopen("file_name","mode"))==NULL)printf("can not open this file!");常用此方法打开文件. mode代表含义: r 为读打开一个文本文件,若

python学习_day07——文件操作

文件操作 一.操作文件三要素 1. 路径    #文件存放的具体位置的路径 2. 编码    #文件打开的的编码格式:utf-8 3. 模式 - rb:以字节的方式只读 obj = open('D:\美女模特空姐护士联系方式.txt',mode='rb') content = obj.read() obj.close() print(content,type(content)) #字节类型 - r: 读取utf-8编码数据,[转换]成unicode(str)编码的数据 #实例: obj=open

python学习--day17-19 文件操作 r w a

python基础-文件操作   一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件       打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异常] w,只写模式[不可读:不存在则创建:存在则清空内容] x, 只写模式[不可读:不存在则创建,存在则报错] a, 追加模式[可读:   不存在则创建:存在则只追

python 学习分享-文件操作篇

文件操作 f_open=open('*.txt','r')#以只读的方式(r)打开*.txt文件(需要与py文件在同一目录下,如果不同目录,需写全路径) f_open.close()#关闭文件 打开文件的模式有: 模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式. r+ 打开一个文件用于读写.文件指针将会放在文件的开头. rb+ 以二进制格式打开一个文件用于读写.文件指针将会放在文件

erlang学习笔记(文件操作)

参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)

PYTHON学习之文件操作;

文件内容替换for line in flielinput.input("filepath",inplace=1):line = line.repace("oldtext","newtext")print line, python中对文件.文件夹(文件操作函数)的操作需要涉及到OS模块和shutil模块.1.得到当前工作目录,即当前PYTHON脚本工作的目录路径:os.getcwd()2.返回指定目录下的所有文件和目录名:os.listdir()3