node.js (第三章) fs文件操作模块

1. 基础内容

const fs = require('fs') 
// 创建文件夹 
fs.mkdir('./logs', (err) => { 
console.log('done') 
})

// 文件夹改名 
fs.rename('./logs', './log', () => {
console.log('done') 
})

// 删除文件夹 fs.rmdir('./log', () => {
console.log('done.')
})

// 写内容到文件里 
fs.writeFile( './logs/log1.txt',
'hello',
 // 错误优先的回调函数 
(err) => {
if (err) {
 console.log(err.message) 
} else { 
console.log('文件创建成功') 
} 
} 
)

// 给文件追加内容 
fs.appendFile('./logs/log1.txt',
 '\nworld',
 () => {
 console.log('done.') 
})

// 读取文件内容 
fs.readFile('./logs/log1.txt',
 'utf-8',
 (err, data) => {
 console.log(data) 
})

// 删除文件 
fs.unlink('./logs/log1.txt', (err) => {
 console.log('done.') 
})

// 批量写文件 
for (var i = 0; i < 10; i++) {
 fs.writeFile(`./logs/log-${i}.txt`,
 `log-${i}`,
 (err) => {
 console.log('done.') 
}) 
}

// 读取文件/目录信息 
fs.readdir('./', (err, data) => {
   data.forEach((value, index) => {
     fs.stat(`./${value}`, (err, stats) => {
     // console.log(value + ':' + stats.size)
     console.log(value + ' is ' + (stats.isDirectory() ? 'directory' : 'file'))
     }) 
   }) 
})


// 阻塞后面代码执行(同步)
import fs from 'fs'

try {
  fs.mkdirSync("./log")
} catch (error) {
  console.log("出错了",error);
}

// 没有阻塞问题(异步)
import fs from 'fs/promises'

fs.mkdir("./ddd").then((result) => {
  console.log(result)
}).catch((err) => {
   console.log(err)
});


2.stream流

读取文件内容

import fs from "fs"

var res = fs.createReadStream('1.txt', 'utf-8')

res.on("data", (chunk) => {
  console.log("data");
  console.log(chunk)
})

res.on("end", () => {
  console.log("end");
})

res.on("error", (err) => {
  console.log("ERROR"+err);
})

往文件写入内容

import fs from "fs"

var ws = fs.createWriteStream('2.txt', 'utf-8')

ws.write('121231121')
ws.write('55555555')

管道(高性能的复制方法,原文件数据会被清空,两个文件内容一模一样)

import fs, { ReadStream } from "fs"

var read = fs.createReadStream('1.txt', 'utf-8')
var ws = fs.createWriteStream('2.txt', 'utf-8')

read.pipe(ws)

3.zilb模块 (压缩文件,优化传输过程)

import http from 'http'
import fs from 'fs'
import zilb from 'zlib'
const gzip = zilb.createGzip()

http.createServer((req, res) => {

  const readStream = fs.createReadStream('./mkdir.js')
  
  res.writeHead(200,{
    //数据的格式
    "Content-Type": "application/x-javascript;charset=utf-8",
    //浏览器解压缩时的格式
    "Content-Encoding":"gzip"
  })

  //输出之前用gzip压缩一下
  readStream.pipe(gzip).pipe(res)

}).listen(3000, () => {
  console.log("开启");
})

4.crypto

1.md5 和 sha1

import crypto from 'crypto'

// 这两种算法都是加密效果
// const hash = crypto.createHash('sha1')
const hash = crypto.createHash('md5')

hash.update('hello')

console.log(hash.digest('hex'))

 2.Hmac 带秘钥的加密算法

import crypto from 'crypto'

// createHmac中第二个参数就是秘钥
const hash = crypto.createHmac('md5', 'wanye')

hash.update('hello')

console.log(hash.digest('hex'))

3.AES 对称加密算法 (常用)

import crypto from 'crypto'

// 加密
function encrypt(key: string, iv: string, data: string) {
  let decipher = crypto.createCipheriv('aes-128-cbc', key, iv)
  return decipher.update(data, 'binary', 'hex') + decipher.final('hex')
}

// 解密
function decrypt(key: string, iv: string, crypted: string) {
  crypted = Buffer.from(crypted, 'hex').toString('binary')
  let decipher = crypto.createDecipheriv('aes-128-cbc', key, iv)
  return decipher.update(crypted, 'binary', 'utf8') + decipher.final('utf8')
}

// 需要的条件 16*8=128
let key: string = 'abcdef1234567890'
let iv: string = 'aaaaaa1234567890'
let data = 'hello'

// 加密结果
let cryted = encrypt(key, iv, data)
console.log(cryted)

// 解密结果
let cryteTrue = decrypt(key, iv, cryted)
console.log(cryteTrue)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微光无限

破晓的日子还有很多!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值