引入文件系统模块:
var fs = require("fs");
使用readFile和writeFile进行操作:
读取文件内容:
exports.t1=function(){
console.log("开始读取文件!");
fs.readFile("./hello.js",function(err,data){
if(err){
return console.log(err);
}
console.log(data.toString());
});
//异步处理
var data=fs.readFileSync("./hello.js");
console.log(data.toString());
console.log("文件读取结束!");
//同步处理
}
复制文件内容:
exports.copy1=function(){
fs.readFile("./hello.js",function(err,data){
if(err){
return console.log(err);
}
fs.writeFile("./hello_c.js",data);
});
}
使用open,read,write进行操作:
exports.t2 = function() {
var buf = new Buffer(1024);
fs.open("./hello.js", "r", function(err, fd) {
if(err) {
return console.log(err);
}
fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
if(err) {
return console.log(err);
}
console.log("一共读取了" + bytes + "字节");
console.log(buf.slice(0, bytes).toString());
});
fs.close(fd, function(err) {
if(err) {
return console.log(err);
}
});
});
}
exports.copy2 = function() {
var buf = new Buffer(1024);
fs.open("./hello.js", "r", function(err, rd) {
if(err) {
return console.log(err);
}
fs.read(rd, buf, 0, buf.length, 0, function(err, bytes) {
if(err) {
return console.log(err);
}
fs.open("./hello_c.js", "w", function(err, wd) {
if(err) {
return console.log(err);
}
fs.write(wd,buf,0,bytes,function(err,written,buffer){
fs.close(wd, function(err) {
if(err) {
return console.log(err);
}
});
console.log(written);
if(err) {
return console.log(err);
}
});
});
});
fs.close(rd, function(err) {
if(err) {
return console.log(err);
}
});
});
}
使用事件循环进行操作:
exports.copy3=function(){
var buf = new Buffer(1024);
var eventEmitter=new event.EventEmitter();
eventEmitter.on("copy.star",function(){
fs.open('./hello.js','r',function(err,rd){
if(err){
return console.log(err);
}
eventEmitter.emit("copy.read",rd);
});
}).on("copy.read",function(rd){
fs.read(rd,buf,0,buf.length,0,function(err,bytes){
fs.close(rd,function(err){
if(err){
return console.log(err);
}
});
if(err){
return console.log(err);
}
eventEmitter.emit("copy.write",bytes);
});
}).on("copy.write",function(bytes){
fs.open("./hello_c.js","w",function(err,wd){
if(err){
return console.log(err);
}
fs.write(wd,buf,0,bytes,function(err,writen,buffer){
fs.close(wd,function(err){
if(err){
return console.log(err);
}
});
if(err){
return console.log(err);
}
});
});
}).emit("copy.star");
}
当复制内容超过规定的数值的时候,就会出错,所以可以使用createReadStream,createWriteStream方法。
exports.t3=function(){
var read=fs.createReadStream("./hello.js");
read.on("data",function(data){
console.log(data.toString());
});
read.on("end",function(){
console.log("文件读取结束!");
})
}
exports.copy4=function(){
var read=fs.createReadStream("./hello.js");
var write=fs.createWriteStream("./hello_c.js");
read.on("data",function(data){
write.write(data);
});
read.on("end",function(){
write.end()
});
read.on("error",function(err){
console.log(err);
})
}
最简单的方法,使用管道:
exports.copy5=function(){
var read=fs.createReadStream("./hello.js");
var write=fs.createWriteStream("./hello_c.js");
read.pipe(write);
}
nodejs 的文件系统API