文件重命名
//文件处理
const fs = require("fs")
//文件路径
const pathToFile = path.join(__dirname, "/src/a.js")
const newPathToFile = path.join(__dirname, "/src/b.js")
//文件重命名
fs.rename(pathToFile, newPathToFile, function(err) {
if (err) {
throw err
} else {
console.log("Successfully renamed the file!")
}
})
文件复制 参考:https://itbilu.com/nodejs/core/41cswxaTx.html
//文件处理
const fs = require("fs")
//文件复制
function copyIt(from, to) {
fs.writeFileSync(to, fs.readFileSync(from));
//fs.createReadStream(src).pipe(fs.createWriteStream(dst));大文件复制
}
const pathToFile = path.join(__dirname, "/src/a.js")
const newPathToFile = path.join(__dirname, "/src/b.js")
copyIt(pathToFile,newPathToFile);
文件读取
// 异步读取文件
fs.readFile('./test.txt', 'utf8', function(err, data){
console.log(data);
})
// 同步读取文件
var data = fs.readFileSync('./test.txt', 'utf8');
console.log(data);
文件写入
//异步方法
fs.writeFile('./message.txt', '这是第一行',function(err){
if(err) console.log('写文件操作失败');
else console.log('写文件操作成功');
});
//同步方法
fs.writeFileSync('./message.txt','这是第一行');
文件实现
var fs = require('fs');
var buf = new Buffer('我喜爱编程');
fs.open('./mess.txt','w',function(err,fd){
fs.write(fd,buf,3,9,0,function(err,written,buffer){
fs.write(fd,buf,12,3,null,function(err,written,buffer){
if(err) console.log('写文件操作失败');
console.log('写文件操作成功');
});
}); //同步写入
fs.writeSync(fd,buf,3,9,0);
});
文件流上传文件
var fs = require('fs');
var readStream = fs.createReadStream('./message.txt',{start:3,end:12});
readStream.on('open',function(fd){
console.log('开始读取文件');
});
readStream.on('data',function(data){
console.log('读取到数据:');
console.log(data);
});
readStream.on('end',function(){
console.log('文件已全部读取完毕');
});
readStream.on('close',function(){
console.log('文件被关闭');
});
readStream.on('error',function(err){
console.log('读取文件失败');
});
var fs = require('fs');
var file = fs.createReadStream('./message.txt');
var out = fs.createWriteStream('./anotherMessage.txt');
file.on('data',function(data){
out.write(data);
});
out.on('open',function(fd){
console.log('需要被写入的文件已打开');
});
file.on('end',function(){ //将操作系统缓存区中的数据全部写入文件
out.end('再见',function(){
console.log('文件全部写入完毕');
console.log('共写入'+out.bytesWritten+'数据');
});
});
//监听writeStream对象的drain事件var fs = require('fs');var out = fs.createWriteStream('./test1.txt');for(var i=0;i<10000;i++){ //返回true或false true代表缓存区已满
var flag = out.write(i.toString());
console.log(flag);
}
out.on('drain',function(){
console.log('操作系统缓存区中的数据已全部输出'); var out = fs.createWriteStream('./test2.txt'); for(var i=0;i<10;i++){ var flag = out.write(i.toString());
console.log(flag);
}
out.on('drain',function(){
console.log('操作系统缓存区中的数据已全部输出');
});
});
参考:https://www.php.cn/js-tutorial-390491.html
/*
1. fs.stat 检测是文件还是目录(目录 文件是否存在)
2. fs.mkdir 创建目录 (创建之前先判断是否存在)
3. fs.writeFile 写入文件(文件不存在就创建,但不能创建目录)
4. fs.appendFile 写入追加文件
5.fs.readFile 读取文件
6.fs.readdir 读取目录
readdirSync 同步读取
7.fs.rename 重命名
8. fs.rmdir 删除目录
9. fs.unlink 删除文件
*/
var fs=require('fs'); //fs是node.js的核心模块,不用下载安装,可以直接引入
//1. fs.stat 检测是文件还是目录 fs.statSync()同步获取stats对象,通过返回值接收。
fs.stat('html',function(error,stats){
if(error){
console.log(error);
return false;
}
console.log('文件:'+stats.isFile());
console.log('目录:'+stats.isDirectory());
})
fs.stat() 文件的个人信息 创建时间 内容等
方法用于查询文件信息,其回调函数中有两个参数(err, stats)。stats是一个fs.Stats对象,该对象中包含一个stats.isFile()方法,如果stats对象存在且stats.isFile()为true才能确认要修改或删除的文件存在。
```javascript
var fs = require('fs');
fs.stat('/xxx', function(err, stat){
if(stat&&stat.isFile()) {
console.log('文件存在');
} else {
console.log('文件不存在或不是标准文件');
}
});
fs.access() 检测文件的是否存在
fs.access()用于检查到指定path路径的目录或文件的访问权限。其回调函数中有一个参数(err),如果检查失败则会出现错误参数的响应。mode是要检查的权限掩码,它可以是以下枚举值之一:
fs.F_OK - 文件是对于进程是否可见,可以用来检查文件是否存在。也是mode 的默认值
fs.R_OK - 文件对于进程是否可读
fs.W_OK - 文件对于进程是否可写
fs.X_OK - 文件对于进程是否可执行。(Windows系统不可用,执行效果等同fs.F_OK)
使用fs.access()方法检查文件是否存在,可以使用以下方法:
var fs = require('fs');
fs.access('/etc/passwd', function(err) {
console.log(err ? '文件存在' : '文件不存在');
});
var fs = require('fs');
fs.access('/etc/passwd', fs.R_OK | fs.W_OK, function(err) {
console.lo(err ? '不可操作!' : '可以读/写');
});
const file = 'text.txt';
// 检查文件是否存在于当前目录中。
fs.access(file, fs.constants.F_OK, (err) => {
console.log(`${file} ${err ? '不存在' : '存在'}`);
});
// 检查文件是否可读。
fs.access(file, fs.constants.R_OK, (err) => {
console.log(`${file} ${err ? '不可读' : '可读'}`);
});
// 检查文件是否可写。
fs.access(file, fs.constants.W_OK, (err) => {
console.log(`${file} ${err ? '不可写' : '可写'}`);
});
// 检查文件是否存在于当前目录中、以及是否可写。
fs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {
if (err) {
console.error(
`${file} ${err.code === 'ENOENT' ? '不存在' : '只可读'}`);
} else {
console.log(`${file} 存在,且可写`);
}
});
关于fs.stat()和fs.access()的同步方法
fs.stat()和fs.access()都有对应的同步方法fs.statSync()和fs.accessSync()。使用这两个同步方法时当操作成功时返回值和异步方法执行成功相同,但操作失败时会抛出异常,所以使用这两个方法应该注意,个人比较推荐使用异步方法。
//2. fs.mkdir 创建目录
fs.mkdir(‘css’,function(error){
if(error){
console.log(error);
return false;
}
console.log(‘创建目录成功’);
})
//3. fs.writeFile 写入文件(会覆盖之前的内容)(文件不存在就创建) utf8参数可以省略
fs.writeFile(‘123.txt’,‘你好nodejs 覆盖’,‘utf8’,function(error){
if(error){
console.log(error);
return false;
}
console.log(‘写入成功’);
})
//4. fs.appendFile 追加文件
fs.appendFile(‘123.txt’,‘这是写入的内容\n’,function(error){
if(error){
console.log(error);
return false;
}
console.log(‘写入成功’);
})
//5.fs.readFile 读取文件
fs.readFile(‘123.txt’,function(error,data){
if(error){
console.log(error);
return false;
}
//console.log(data); //data是读取的十六进制的数据。 也可以在参数中加入编码格式"utf8"来解决十六进制的问题;
console.log(data.toString()); //读取出所有行的信息
})
//6.fs.readdir 读取目录下第一级内容 把目录下面的文件和文件夹都获取到。
fs.readdir(‘html’,function(error,data){
if(error){
console.log(error);
return false;
}
console.log(data); //data是数组类型,包含文件夹以及文件的名字(只有第一级目录内容)。拿到一个文件夹下面的所有目录
})
//7.fs.rename 重命名 1.改名 2.剪切文件(移动)
fs.rename(‘html/index.html’,‘html/news.html’,function(error){
if(error){
console.log(error);
return false;
}
console.log(‘修改名字成功’);
})
//8. fs.rmdir 删除目录 rmdir 这个方法只能删除目录,不能删除文件
fs.rmdir(‘abc目录’,function(error){
if(error){
console.log(error);
return false;
}
console.log(‘删除目录成功’);
})
//9. fs.unlink删除文件
fs.unlink(‘index.txt’,function(error){
if(error){
console.log(error);
return false;
}
console.log(‘删除文件成功’);
})
//10. fs.createReadStream 从文件流中读取数据,读取的文件比较大时建议用流的方式读取,文件比较大会多次读取。
var fileReadStream = fs.createReadStream( ‘data1.json’);
var str = ‘’;
fileReadStream.on(‘data’, (data) => {
console.log(“接收到” + data.length); //文件比较大时,会多次读取,多次执行该回调函数
str += data;
})
fileReadStream.on(‘end’, () => {
console.log(" — 结束 —");
console.log( str );
})
fileReadStream.on(‘error’, (error) => {
console.log(error)
})
//11. fs.createWriteStream 写入文件流
var fs = require(“fs”);
var data = “我是从数据库获取的数据,我要保存起来”;
var writerStream = fs.createWriteStream(‘output.txt’);
writerStream.write( data , ‘UTF8’ );
writerStream.end(); //标记文件末尾 结束写入流,释放资源
writerStream.on( ‘finish’, function() {
console.log(“写入完成。”);
});
writerStream.on( ‘error’, function(error){
console.log(error.stack);
});
console.log(“程序执行完毕”);
//12. pipe 管道流
var fs = require(“fs”);
var readerStream = fs.createReadStream( ‘input.txt’);
var writerStream = fs.createWriteStream( ‘output.txt’);
readerStream.pipe( writerStream );
console.log(“程序执行完毕”);
//13. fs.access 判断目录、文件是否存在(读写权限)
var fs = require(‘fs’);
fs.access(‘package.json’,(err)=>{
console.log(err ? ‘目录/文件不存在’: ‘文件存在,可以进行读写’);
});
参考:[https://www.cnblogs.com/mxh-java/p/11598742.html](https://www.cnblogs.com/mxh-java/p/11598742.html)
NodeJs操作文件-写入、修改、删除、追加、读取文件内容、判断文件是否存在
NodeJs操作file常用方法:
var fs = require('fs');
//写入文件
fs.writeFile("test.txt", "hello world! maxinhai is good coder!", function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
//向文件追加内容
fs.appendFile("test.txt", "人间失格", 'utf-8', function(err) {
if(err) {
console.log(err);
return false;
}
console.log('写入成功!!!');
});
//读取文件
fs.readFile("test.txt", function(err, data) {
if(err) {
console.log(err);
return false;
}
console.log(data.toString());
});
//unlink删除文件
fs.unlink('test.txt',function(err) {
if(err){
console.log(err);
return false;
}
console.log('删除文件成功');
});
//判断文件/目录是否存在
fs.access('test.txt',(err)=>{
console.log(err ? '目录/文件不存在': '文件存在,可以进行读写');
});
修改文件指定内容:
编写这段代码的背景是我要定时同步数据,需要记录上次同步数据到那个时间点了,所以文件里只存了时间;
//获取时间
function getDateTime() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
var dateTime = year+'年'+month+'月'+day+'日 '+hour+':'+minute+':'+second;
return dateTime;
}
//修改文件内容
let dateTime = getDateTime();
let date = `${dateTime}`;
console.log('startTime', date);
//1.先写入时间
fs.writeFile('date.txt', date, (err) => {
if (err) throw err;
console.log('写入时间',dateTime);
});
function changeDateTime() {
//2.再修改时间
dateTime = getDateTime();
date = `${dateTime}`
fs.writeFile('date.txt', date, (err) => {
if (err) throw err;
console.log('圆满解决颜色替换', dateTime);
});
//读取文件
fs.readFile("date.txt", function(err, data) {
if(err) {
console.log(err);
return false;
}
console.log('修改后时间',data.toString());
});
}
//模拟隔一段时间再去写入
setTimeout(changeDateTime, 1500);
上面代码并不能达到修改指定内容的功能,请看下面:
//修改文件内容
let dateTime = getDateTime();
let date = `{date:${dateTime}, msg:hello world}`;
console.log('startTime', date);
//1.先写入时间
fs.writeFile('date.txt', date, (err) => {
if (err) throw err;
console.log('写入时间',dateTime);
});
function changeDateTime() {
//2.再修改时间
dateTime = getDateTime();
date = `{date:${dateTime}, msg:hello javaScript}`
fs.writeFile('date.txt', date, (err) => {
if (err) throw err;
console.log('圆满解决颜色替换', dateTime);
});
//读取文件
fs.readFile("date.txt", function(err, data) {
if(err) {
console.log(err);
return false;
}
console.log('修改后时间',data.toString());
});
}
//模拟隔一段时间再去写入
setTimeout(changeDateTime, 1500);