• Nodejs-文件流


    1.什么是流?

    流是程序输入输出的一个连续的字节序列。

    有文件流,网络流,设备(例如鼠标,键盘,磁盘,调制解调器和打印机)的输入输出都是用流来处理的。

    任何数据的最根本表现形式都是二进制

    读取文件

    用异步方式读取

    fs.readFile(filename,callback);

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

    写入文件

    语法

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

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

    如果文件存在,该方法写入的内容会覆盖旧的文件内容。

    参数

    参数使用说明如下:

    • path - 文件路径。

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

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

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

    //文件复制
    const fs=require('fs');
    const path=require('path');
    
    console.time('read');
    fs.readFile('D:\nodejs\01.txt',(error,data)=>{
    	if(error){
    		throw error
    	}
    	console.timeEnd('read');
    	console.time('write');
    	//读取文件拿到
    	fs.writeFile('D:\nodejs\02.txt',data,error=>{
    		if(error){
    			throw error
    		}
    		console.timeEnd('write');
    		console.log('拷贝完成');
    	});
    
    });
    

      

      

    但是如果大文件的拷贝的话,内存就受不了

    而且没有进度的概念,比如说,你拷贝一个很大的文件,一直在拷贝,你不知道已经拷贝到哪了,已经等不及了,就把它给停掉了,这样就造成之前的拷贝白白浪费了。

    因此采取文件流的方式复制,就是针对大文件操作的

    2.文件流操作方式

    获取文件信息

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

    fs.stat(path, callback)

    参数

    参数使用说明如下:

    • path - 文件路径。

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

    fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性。

    //文件流的方式复制
    const fs=require('fs');
    const path=require('path');
    
    //创建文件的读取流,并没有读出正式的数据,开始了读取文件的任务
    var reader=fs.createReadStream('D:\nodejs\03.txt');
    //创建一个写入流
    var writer=fs.createWriteStream('D:\nodejs\04.txt');
    fs.stat('D:\nodejs\01.txt',(err,stats)=>{
    	if(stats){//如果有stats,就说明文件存在
    		var readTotal=0;
    		reader.on('data',(chunk)=>{
    			//chunk是一个buffer(字节数组),每次读取的只是一小部分数据
    			writer.write(chunk,(err)=>{
    				console.log('写的进度:'+((readTotal+=chunk.length)/stats.size*100)+'%');//可以查看进度
    			});
    		});
    	}
    });
    

      

     

  • 相关阅读:
    五:系统及数据库
    四:WEB源码扩展
    三:搭建安全拓展
    二:数据包扩展
    一:基础入门-概念名词
    LeetCode 11. Container With Most Water
    LeetCode 263. Ugly Number
    LeetCode 10. Regular Expression Matching
    LeetCode 58. Length of Last Word
    LeetCode 53. Maximum Subarray
  • 原文地址:https://www.cnblogs.com/GumpYan/p/5806192.html
Copyright © 2020-2023  润新知