使用node 实现前端的文件拷贝

926 阅读4分钟

这是我参与11月更文挑战的第六天,活动详情请查看:2021最后一次更文挑战

前言:

前台的服务器

运行在服务端的JavaScript,基于chrome JavaScript运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

我们在vue项目中经常使用的npm,是node.js一起的管理工具,解决的了很多的node在代码部署上的问题。

创建应用程序的步骤

  • 引入 required 模块:我们可以使用 require指令来载入 Node.js 模块。
  • 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
  • 接收请求与响应请求:服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。
//使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http1
var http1 = require('http');
//使用http.createServer()方法创建服务器,返回值为一个对象
http1.createServer(function (request, response) {

    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(8888);

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

文件的读取 || 写入

1、写入文件

1)write-string

/*
*fs.write(fd, string[, position[, encoding]], callback)
--*/
-----------------------------------------------------------
/*
* r+:在原文内容的基础上替换相同长度的字符 
                   eg:原:12345-----修:JAVA5
* a+:在原文件后面添加内容  
                   eg:原12345----修:12345   JAVA
* */
let fs=require('fs');
//打开文件
fs.open('../A/in.txt','a+',(err,fd)=>{
    fs.write(fd,'JAVA',(err)=>{
})
});

2)write-buffer

/*
*
* fs.write(fd, buffer[, offset[, length[, position]]], callback)
* */
let fs=require('fs');
let buf=Buffer.from('Welcome');
 fs.open('../A/in.txt','a+',(err,fd)=>{
    fs.write(fd,buf,(err)=>{
  console.log("成功写入!")
    })
 });
/* 
*fs.write(fd, buffer[, offset[, length[, position]]], callback)
*/
  let fs=require('fs');
  let buf=Buffer.from('Welcome');

fs.open('../A/in.txt','a+',(err,fd)=>{
    /*截取buf的长度为3,下角标从1开始的字符,追加到原有的文件后面
    * eg:原123456---修:123456elc
   * */
   fs.write(fd,buf,1,3,(err)=>{
      console.log("成功写入!")
  })

3)writeFile

/*
* fs.writeFile(file, data[, options], callback)
*/
let fs=require('fs');
let txt='Hello Node.js';
let fileName='../A/message.txt';
let saved_txt='The file has been saved!';


const data = Buffer.from(txt);
fs.writeFile(fileName, data, (err) => {
    if (err) throw err;
    console.log(saved_txt);
});
writeFile()write()的区别:

相同点

1)当fs.writeFile()的参数是文件描述符时,则相当于使用fs.write();

2)在文件描述符的情况下,文件不会被替换;且原始数据会被保留,新数据会被写入某个位置(开头或结束);

不同点:

1)fs.write()可能仅写入缓冲区的一部分,并且将需要重试以写入剩余数据。

2)fs.writeFile()将重试直到数据被完全写入(或发生错误)。

同步写入

 fs.writeSync(fd,buffer[,offset[,length[,position]]])
 fs.writeSync(fd,string[,position[,encoding]])
 fs.writeFileSync(file,data[,options])

方式一

let fs=require('fs');
let buf=Buffer.from('111111111111111111111111111111');
let buf1=Buffer.from('222222222222222222222222222222222');
fs.open('../A/message.txt','r+',(err,fd)=>{
        //同步执行
            fs.writeSync(fd,buf);
            fs.writeSync(fd,buf1);
//直接写入文件,覆盖掉原来的内容
        //异步执行
            fs.write(fd,buf,(err)=>{});
            fs.write(fd,buf1,(err)=>{});
});

方式二

let fs=require('fs');
let buf=Buffer.from('111111111111');
let buf1=Buffer.from('22222222222');
let fileName='../A/message.txt';
 /*省略掉打开文件的方式*/
 fs.writeFileSync(fileName,buf);
fs.writeFileSync(fileName,buf1);

2、读取文件

1.fs.read(fd,buffer,offset,length,position,callback)<=>fs.read(fd,[options,]callback)
2.fs.readSync(fd,buffer,offset,length,position)
3.fs.readFile(path[,options],callback)
4.fs.readFileSync(path[,options])
  • 引入
let fs=require('fs');
//未规定编码集时,以二进制输入字符
fs.readFile('../A/out.txt',(err,data)=>{
    if (err) throw err;
    console.log(data)
})

方式一

let fs=require('fs');
//提前规定编码集---utf8
fs.readFile('../A/out.txt','utf8',(err,data)=>{
    if (err) throw err;
    console.log(data)
})

方式二

let fs=require('fs');
//输出时一字符的形式输出--toString()
fs.readFile('../A/out.txt',(err,data)=>{
    if (err) throw err;
    console.log(data.toString())
})

3、复制文件

文件的复制有4种方法:pipestream,file,直接读取内容并写入

1)直接读取文件的内容并写入

let fs=require('fs');
let RfileName='../../1.View/in.txt';
let WfileName='../../1.View/B1.txt';

fs.copyFile(RfileName,WfileName,function(err){
    if(err) throw err;
   console.log("复制成功");
})

2)pipe-copy

var fs = require("fs");
let RfileName='../../1.View/in.txt';
let WfileName='../../1.View/B1.txt';

var readerStream = fs.createReadStream(RfileName);

var writerStream = fs.createWriteStream(WfileName);
//管道读写操作----适用于大文件的操作

readerStream. pipe(writerStream) ;

3)stream-copy

let fs = require('fs');
let RfileName='../../1.View/in.txt';
let WfileName='../../1.View/B1.txt';

let readertream = fs.createReadStream(RfileName);
let writerStream =fs.createWriteStream(WfileName);
readertream.setEncoding('utf8');
let data='';
readertream.on('data',function (chunk) {
    data+=chunk;
    writerStream.write(data,'utf8' );
})

4)file-copy

/*先读取A文件----再写入B文件*/

let fs=require('fs');

let RfileName='../../1.View/in.txt';
let WfileName='../../1.View/B1.txt';
fs.readFile(RfileName,'utf8',(err,data)=>{
    if (err) throw err;
    console.log(data);
    fs.writeFile(WfileName, data, (err) => {
        if (err) throw err;
        console.log("复制成功");
    });
})