Node.js 文件系统

摘要:
节点。js提供了一组类似于UNIX标准的文件操作API。节点。js文件系统模块中的方法有异步和同步版本。例如,读取文件内容的函数包括异步fs。readFile()和同步fs readFileSync()标志-文件打开行为。模式-设置文件模式(权限)。文件创建的默认权限为0666.varfs=require;//在异步fs中读取文件的语法格式。writeFile模式:fs。readfd-through fs open()方法返回的文件描述符。位置-文件读取的起始位置。如果位置值为空,将从当前文件指针中读取。回调函数,它有三个参数err、bytesRead和buffer。err表示错误信息,bytesRead表示读取的字节数,buffer表示缓冲区对象。

Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

创建 test.txt 文件

这是在test.txt中的内容

创建 main.js 文件

var fs=require("fs");

//异步
fs.readFile("test.txt",function(err,data){
    if(err){
        return console.error(err);
    }
    console.log("异步:"+data.toString());
})

//同步
var data=fs.readFileSync("test.txt");
console.log("同步:"+data.toString());

Node.js 文件系统第1张

异步模式下打开文件

fs.open(path, flags[, mode], callback)
  • path - 文件的路径。

  • flags - 文件打开的行为。具体值详见下文。

  • mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。

  • callback - 回调函数,带有两个参数如:callback(err, fd)。

Node.js 文件系统第2张

var fs=require("fs");

//异步
fs.open("test.txt","r+",function(err,data){
    if(err){
        return console.error(err);
    }
    console.log("文件打开成功");
})

Node.js 文件系统第3张

异步模式获取文件信息的语法格式:

fs.stat(path, callback)
  • path - 文件路径。

  • callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

var fs=require("fs");

//异步
fs.stat("test.txt","r+",function(err,stats){
    if(err){
        return console.error(err);
    }
    console.log(stats.isFile());//判断是否是文件
})

Node.js 文件系统第4张

Node.js 文件系统第5张

var fs=require("fs");

//异步
fs.stat("test.txt","r+",function(err,stats){
    if(err){
        return console.error(err);
    }
    console.log(stats.isFile());//判断是否是文件
    console.log(stats.isDirectory());//判断是否是目录
})

Node.js 文件系统第6张

var fs=require("fs");

//异步
fs.stat("test.txt",function(err,stats){
    if(err){
        return console.error(err);
    }
    console.log(stats);
    console.log(stats.isFile());//判断是否是文件
    console.log(stats.isDirectory());//判断是否是目录
})

Node.js 文件系统第7张

异步模式下写入文件的语法格式:

fs.writeFile(file, data[, options], callback)

writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。

  • file - 文件名或文件描述符。

  • data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。

  • options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'

  • callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

var fs=require("fs");

//异步
fs.writeFile("test.txt","这是新写入的哈",function(err){
    if(err){
        return console.error(err);
    }
    console.log("数据写入成功");

    fs.readFile("test.txt",function(err,data){
        if(err){
            return console.error(err);
        }
        console.log(data.toString());
        console.log("数据读取成功");
    })
})

Node.js 文件系统第8张

异步模式下读取文件的语法格式:

fs.read(fd, buffer, offset, length, position, callback)
  • fd - 通过 fs.open() 方法返回的文件描述符。

  • buffer - 数据写入的缓冲区。

  • offset - 缓冲区写入的写入偏移量。

  • length - 要从文件中读取的字节数。

  • position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。

  • callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//异步
fs.open("test.txt","r+",function(err,fd){
    if(err){
        return console.error(err);
    }
    console.log("文件打开成功");

    fs.read(fd,buf,0,buf.length,0,function(err,bytes){
        if(err){
            return console.error(err);
        }
        console.log(bytes+" 字节被读取");

        //输出读取的字节
        if(bytes>0){
            console.log(buf.slice(0,bytes).toString());
            console.log("数据读取成功");
        }
        
    })
})

Node.js 文件系统第9张

异步模式下关闭文件的语法格式:

fs.close(fd, callback)
  • fd - 通过 fs.open() 方法返回的文件描述符。

  • callback - 回调函数,没有参数。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//异步
fs.open("test.txt","r+",function(err,fd){
    if(err){
        return console.error(err);
    }
    console.log("文件打开成功");

    fs.read(fd,buf,0,buf.length,0,function(err,bytes){
        if(err){
            return console.error(err);
        }
        console.log(bytes+" 字节被读取");

        //输出读取的字节
        if(bytes>0){
            console.log(buf.slice(0,bytes).toString());
            console.log("数据读取成功");
        }

        //关闭文件
        fs.close(fd,function(err){
            if(err){
                console.error(err);
            }
            console.log("文件关闭成功");
        })
        
    })
})

Node.js 文件系统第10张

异步模式下截取文件的语法格式:

fs.ftruncate(fd, len, callback)
  • fd - 通过 fs.open() 方法返回的文件描述符。

  • len - 文件内容截取的长度。

  • callback - 回调函数,没有参数。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//异步
fs.open("test.txt","r+",function(err,fd){
    if(err){
        return console.error(err);
    }
    console.log("文件打开成功");

    //截取文件
    fs.ftruncate(fd,9,function(err){
        if(err){
            return console.error(err);
        }
        console.log("文件截取成功");

        fs.read(fd,buf,0,buf.length,0,function(err,bytes){
            if(err){
                return console.error(err);
            }
            console.log(bytes+" 字节被读取");

            //输出读取的字节
            if(bytes>0){
                console.log(buf.slice(0,bytes).toString());
                console.log("数据读取成功");
            }

            //关闭文件
            fs.close(fd,function(err){
                if(err){
                    console.error(err);
                }
                console.log("文件关闭成功");
            })
            
        })
    })
})

Node.js 文件系统第11张

删除文件的语法格式:

fs.unlink(path, callback)
  • path - 文件路径。

  • callback - 回调函数,没有参数。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//删除文件
fs.unlink("test.txt",function(err){
    if(err){
        console.error(err);
    }
    console.log("文件删除成功");
})

Node.js 文件系统第12张

 Node.js 文件系统第13张

创建目录的语法格式:

fs.mkdir(path[, options], callback)
  • path - 文件路径。

  • options 参数可以是:

    • recursive - 是否以递归的方式创建目录,默认为 false。
    • mode - 设置目录权限,默认为 0777。
  • callback - 回调函数,没有参数。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//创建目录
fs.mkdir("temp/test/",function(err){
    if(err){
       return console.error(err);
    }
    console.log("目录创建成功");
})

Node.js 文件系统第14张

 Node.js 文件系统第15张

 这个案例中必须保证temp目录是存在的

可以添加 recursive: true 参数,不管temp是否存在:

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//创建目录
fs.mkdir("temp/test/",{recursive:true},(err)=>{
    if(err){
       throw err;
    }
    console.log("目录创建成功");
})

Node.js 文件系统第16张

 Node.js 文件系统第17张

读取目录的语法格式:

fs.readdir(path, callback)
var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//读取目录
fs.readdir("temp/test/",function(err,files){
    if(err){
       throw err;
    }
    
    files.forEach(function(file){
        console.log(file);
    })
    
})

Node.js 文件系统第18张

删除目录的语法格式:

fs.rmdir(path, callback)
var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//删除目录
fs.rmdir("temp/test/",function(err){
    if(err){
       throw err;
    }
    
    console.log("删除目录成功");
})

Node.js 文件系统第19张

这里报错了,因为我要删除的目录不是空目录,得先保证目录里没有文件才能删除目录

以下再补充一些常用的操作方法,要看完整的请上官方文档

fs.rename(oldPath, newPath, callback)
异步 rename().回调函数没有参数,但可能抛出异常。

fs.chmod(path, mode, callback)
异步 chmod().回调函数没有参数,但可能抛出异常。

fs.appendFile(filename, data[, options], callback)
异步追加文件内容。

fs.watchFile(filename[, options], listener)
查看文件的修改。

fs.unwatchFile(filename[, listener])
停止查看 filename 的修改。

fs.exists(path, callback)
检测给定的路径是否存在。

fs.access(path[, mode], callback)
测试指定路径用户权限。

fs.createReadStream(path[, options])
返回ReadStream 对象。

免责声明:文章转载自《Node.js 文件系统》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇防止网络渗透措施两则日期控件的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

图像识别模型

一、数据准备 首先要做一些数据准备方面的工作:一是把数据集切分为训练集和验证集, 二是转换为tfrecord 格式。在data_prepare/文件夹中提供了会用到的数据集和代码。首先要将自己的数据集切分为训练集和验证集,训练集用于训练模型,验证集用来验证模型的准确率。这篇文章已经提供了一个实验用的卫星图片分类数据集,这个数据集一共6个类别, 见下表所示...

x60系统安装步骤

T60/X60联想采用了sata接口的硬盘,安装系统时会出现蓝屏而终止,解决方案如下: 1、bios设置。这一步是针对T60/X60的。开机按f1进入bios,进入configuration,然后在SATA里面将SATA的模式设置成compatibility(兼容模式),默认的是AHCI模式(高级主控接口),这一步很重要,否则安装操作系统时会蓝屏,其中的原...

android共享内存

在android下不能通过shm_open使用共享内存。 网上有好多关于android下使用Ashmem实现共享内存的,但经过尝试该方法可以mmap出内存,但是和另一个进程没有实现共享。 具体的使用方法: 1)fd = open("/dev/ashmem", O_RDWR); 2)ioctl(fd, ASHMEM_SET_NAME, region_name...

oracle instantclient_11_2插件安装

1.安装plsql 2.instantclient_11_2下载,解压到目录 D:DevToolsinstantclient_11_2 3.打开plsql, 点击“取消” 4.选择“工具”--》首选项---》连接--》oracle主目录填写D:DevToolsinstantclient_11_2 OCI库填写 D:DevToolsinstantclient...

VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径

说明 $(RemoteMachine) 设置为“调试”属性页上“远程计算机”属性的值。有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置。 $(References) 以分号分隔的引用列表被添加到项目中。 $(ConfigurationName) 当前项目配置的名称(例如“Debug”)。 $(PlatformName) 当前项目平台的名称(例...

Android项目目录结构模板以及简单说明

1) src  文件   编写java代码的文件目录,遵循java的命名规范、分包 2) gen  文件      包含了android的资源文件的标识符,是不需要程序员维护,是自动添加的 3) assets 文件  源生资源文件;保存应用的资源文件,例如:音频文件、视频文件、不经常被用户修改的文件 4) bin 文件  包含编译生成apk的应用程序xx...