文件操作和网络通信

1. 文件操作

1.1. 为什么要进行文件操作

  • 浏览器端JavaScript不能操作文件(安全性考虑)
  • Node.js需要文件操作,因为
    • 可以开发命令行的工具,例如:i5ting
    • 开发高效率的web服务器,需要操作文件
  • 文件种类繁多,计算机最终存储的时候都是以2进制形式存储
  • 存储单位
    • 1byte = 8bit
    • 1k =
    • 1m = 1024k

1.2. Buffer对象

  • Buffer

    • Buffer对象是一个像Array的对象,主要存储字节
    • Node.js作为后端开发,需要处理图片、js、css等文件,图片等资源是以二进制形式存在的,所以在Node.js中增加了一个buffer对象,专门用来存放二进制数据
    • Buffer对象其实就是在内存中申请一块空间,用于存放数据
  • Buffer对象的使用(了解)
    • 第一种创建方式

      //开辟4个字节的空间存储数据
      let buffer = new Buffer(4);
      //创建完成后,buffer分配的内存可能有数据
      //清空buffer对象
      buffer.fill(0);
      
    • 第二种创建方式
      //直接存储数据在buffer中
      let buffer = new Buffer("hello itcast");
      
    • 读取文件中遇到的Buffer
      var fs = require("fs");
      fs.readFile("01-buffer.js", function (err,content) {
        //此处的content就是Buffer
        console.log(content);
      });
      
      fs.readFile("01-buffer.js","utf8", function (err,content) {
        //指定了编码后,获取到的content是字符串
        console.log(content);
      });
      
    • Buffer支持的编码
      • ascii
      • utf8 默认
      • utf16
      • ucs2
      • base64
      • hex
      • Binary
    • 支持gb2312-第三方包 iconv-lite
    • Buffer的常见方法
      • buf.write() 往buffer写入内容
      • buf.toString([编码]) 把buffer中的内容转换成字符串
      • buf.length 获取buffer的长度
      • Buffer.isEncoding("utf8") 检查支持的编码(不支持gb2312)
  • File System
    • 操作文件夹

      • mkdirSync() 同步创建文件夹
      • mkdir() 异步创建文件夹
      • rmdirSync() 同步删除文件夹
      • rmdir() 异步删除文件夹
      • 判断文件是否存在
    • 操作文件
      • writeFile() 写入文件,会覆盖以前的内容
      • appendFile() 追加文件
      • readFile() 读取文件
      • rename() 更改文件名
      • unlink() 删除文件
      • stat() 获取文件的相关属性
      • watchFile() 监控文件或文件夹内文件的改变
    • 练习:监视文件abc/abc.txt,如果文件发生变化把内容拷贝到target/123.txt
    • 拷贝文件:
      • 之前的方式只能拷贝小文件
      • 拷贝大文件
    • 文件流操作
      • createReadStream()
      • createWriteStream()
      • 拷贝大文件带进度

        ```javascript "use strict"

        const fs = require("fs");

        let sourceFile ="xdy.avi"; let targetFile = "123.itcast";

        //文件流读写 进行大文件复制 //创建读流对象 let rs = fs.createReadStream(sourceFile); //创建写流对象 let ws = fs.createWriteStream(targetFile);

    //文件大小
    let fileSize = fs.statSync(sourceFile).size;

    //总共写入的大小
    let writeTotal = 0;

    //监听data事件
    rs.on("data", chunk => {
        //每次读到的数据  buffer对象

        writeTotal += chunk.length;

        //把chunk写入目标文件
        ws.write(chunk);

        console.log(writeTotal/fileSize * 100);
    });

    //读取完毕
    rs.on("end", ()=>{
        console.log("文件读取完毕");

        //写入结束
        ws.end(()=>{
            console.log("文件写入完毕");
        });
    });
    ```

    - 管道拷贝大文件

    ```javascript
    "use strict"
    const fs = require("fs");

    let sourceFile ="xdy.avi";
    let targetFile = "123.itcast";

    let rs = fs.createReadStream(sourceFile);
    let ws = fs.createWriteStream(targetFile);

    rs.pipe(ws);
    ```

2. Node.js的异步编程

  • 同步和异步的概念
  • 非阻塞式I/O
  • 事件驱动
  • 回调函数
  • 监视js的变化重新运行的插件 npm install nodemon -g

    • 使用 nodemon js文件路径

3. 网络通信

  • 网络的概念
  • IP和端口的概念
  • Socket的概念
  • 打开telnet

    程序和功能-->

  • 自己开发一个小服务器
"use strict";

const net = require("net");

//创建server对象
let server = net.createServer();

//监听连接到服务器上的客户端
server.on("connection", (socket) => {
    console.log("haha");
    //服务器的socket
    //向客户端发送消息
    socket.write("welcome to my server");

    socket.on("data", (content) => {
        //服务器发送的内容。buffer
        console.log(content.toString());
    });
});

//监听端口
server.listen(8888,()=>{
    console.log("正在监听...");
});
  • 自己开发的客户端
"use strict";

var net = require("net");

let port = 8888;
let ip = "127.0.0.1";

//连接服务器
let client = net.createConnection(port,ip,()=>{
    console.log("连接服务器成功");

    //向服务器发送消息
    client.write("你好服务器");
});

//接收服务器的消息
client.on("data", (content) => {
    //服务器发送的内容。buffer
    console.log(content.toString());
});
  • 处理错误
//注册error事件
socket.on("error",()=>{
    console.log("客户端下线");
})
时间: 2025-01-05 15:11:23

文件操作和网络通信的相关文章

python速成第二篇(小爬虫+文件操作+socket网络通信小例子+oop编程)

大家好,由于前天熬夜写完第一篇博客,然后昨天又是没休息好,昨天也就不想更新博客,就只是看了会资料就早点休息了,今天补上我这两天的所学,先记录一笔.我发现有时候我看的话会比较敷衍,而如果我写出来(无论写到笔记本中还是博客中,我都有不同的感觉)就会有不同的想法,我看书或者看资料有时候感觉就是有一种惰性,得过且过的感觉,有时候一个知识想不通道不明,想了一会儿,就会找借口给自己说这个知识不重要,不需要太纠结了,还是去看下一个吧,然后就如此往复下去,学习就会有漏洞,所以这更加坚定了我写博客来记录的想法.

总结文件操作函数(二)-C语言

格式化读写: #include <stdio.h> int printf(const char *format, ...);                   //相当于fprintf(stdout,format,-); int scanf(const char *format, -); int fprintf(FILE *stream, const char *format, ...);      //中间的参数为写入文件的格式 int fscanf(FILE *stream, const

Python 文件操作

操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读: 不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,

python基础:python循环、三元运算、字典、文件操作

目录: python循环 三元运算 字符串 字典 文件操作基础 一.python编程 在面向过程式编程语言的执行流程中包含: 顺序执行 选择执行 循环执行 if是条件判断语句:if的执行流程属于选择执行:if语句有三种格式,如下: 在多分支的if表达式中,即使多个条件同时为真,也只会执行一个,首先测试为真: 选择执行 单分支的if语句 if CONDITION: 条件为真分支 双分支的if语句 if CONDITION 条件为真分支 else 条件不满足时分支 多分支的if语句 if CONDI

python文件操作

文件操作:os.mknod("test.txt")        创建空文件fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件 关于open 模式: w     以写方式打开,a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)r+     以读写模式打开w+     以读写模式打开 (参见 w )a+     以读写模式打开 (参见 a )rb     以二进制读模式打开wb     以二进制写模式打

Python基础(六) 基础文件操作

今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个文件,创建一个file对象,相关的方法可以调用它进行读写 . 语法格式如下: 1 2 3 file object = open(文件名,打开文件的模式) file object  = with open (文件名,打开文件的模式) as 变量名 两种语法格式的不同在于下面这种方法不用输入f.clos

小何讲Linux: 基本文件操作和实例

文件操作的基本概念参见博客: 小何讲Linux: 底层文件I/O操作 1.  函数说明 open()函数:是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所谓打开文件实质上是在进程与文件之间建立起一种连接,而"文件描述符"唯一地标识着这样一个连接 close()函数:是用于关闭一个被打开的文件.当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件. read()函数:是用于将从指定的文件描述符中读出的数据

C语言中的文件操作---重定向操作文件

先说个题外话,文件操作以及字符串与字符深入处理(就是那些什么puts(), getchar()什么的)是本人深入认识C++最后的两座大山.而今天先把重定向文件操作解决掉. 输入输出重定向恐怕是文件I/O操作中最简单的方法了,具体用法是现在main函数的开头加入两条语句,例如: freopen("D:\\input.txt", "r", stdin); freopen("D:\\output.txt", "w", stdout)

文件操作

1.C文件操作 2.c++文件操作 3.MFC文件操作:CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件.内存文件和socket文件. Visual C++处理的文件通常分为两种: 文本文件:只可被任意文本编辑器读取ASCII文本. 二进制文件:指对包含任意格式或无格式数据的文件的统称. 1.定义文件变量 定义文件变量格式:CStdioFile 文件变量: 例如,定义一个名称为f1的文件变量,语句如下:CStdioFile f1; 2.打开指