Node基础初始(1)

node

buffer缓冲区

// let buf = new Buffer(5);
// let buf = new Buffer('abc');//<Buffer 61 62 63>  97 98 99
// let buf = new Buffer([1,2,3]);
// let buf1 = new Buffer(buf);
// console.log(buf1);

不推荐new的方式产生实例,推荐静态方法生成实例

// let buf = Buffer.alloc(5);//<Buffer 00 00 00 00 00>
// console.log(buf);

// let buf = Buffer.from('abc');
// console.log(buf);
  • byteLength
// const str = '\u00bd + \u00bc = \u00be';
// let ret = Buffer.byteLength(str,'ascii');//统计特定编码下字符串对应的字节数
// console.log(ret,str);
  • isBuffer
// let buf = Buffer.alloc(5);
// console.log(Buffer.isBuffer(buf));//判断参数中的数据是否为Buffer实例
// console.log(Buffer.isBuffer('abc'));
  • isEncoding
// console.log(Buffer.isEncoding('base64'));//判断Buffer是否支持该编码
  • write
// buf.write(string[, offset[, length]][, encoding])
/*
    参数一:要写入buf的字符串
    参数二:开始写的位置
    参数三:写入的长度
    参数四:编码形式
*/
// let buf = Buffer.alloc(5);
// buf.write('abc',2,2,'utf8');//向Buffer实例中写入数据
// console.log(buf);
  • equals
// let buf1 = Buffer.from('abc');
// let buf2 = Buffer.from('abcd');
// console.log(buf1.equals(buf2));//判断两个Buffer实例是否相等
  • indexOf
// const buf = Buffer.from('this is a buffer');
// console.log(buf.indexOf('buffer'));//检索特定字符串在整个Buffer中的位置
  • slice
let buf = Buffer.from('abcde');
console.log(buf.slice(2,5));//截取Buffer实例的一部分,生成一个新的Buffer实例

path

  • basename
// 截取路径中的文件名
// let ret = path.basename('/foo/bar/baz/asdf/quux.html');
// let ret = path.basename('/foo/bar/baz/asdf/quux.html', '.html');//省略文件格式后缀
// console.log(ret);
  • parse
// parse把字符串形式的路径转化为对象形式
// let obj = path.parse('/home/user/dir/file.txt');
// console.log(obj.base);
// { root: '/',
//   dir: '/home/user/dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' 
// }
  • format
// format把对象形式的路径转化为字符串形式
// let str = path.format(obj);
// console.log(str);//  /home/user/dir\file.txt
  • normalize
// normalize标准化路径
// let str = path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// console.log(str);// C:\temp\foo\
  • join(常用)
// join用来拼接路径
// let str = path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// let str = path.join(__dirname,'./README.md');//C:\Users\www\Desktop\Nodejs\代\nodejs\day03\README.md
// console.log(str);// \foo\bar\baz\asdf
  • relative
// 计算相对路径
// let str = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// console.log(str);// ..\..\impl\bbb
  • resolve
// 解析绝对路径
// let str = path.resolve('/foo/bar', '/tmp/file/');
// console.log(str);//C:\tmp\file

file

require 依赖请求

const path = require('path');
const fs = require('fs');

stat

// 查看文件的状态信息(异步操作)
fs.stat(path.join(__dirname,'./data.txt'),(err,stats)=>{
    console.log(err);
    // console.log(stats);
    // console.log('atime:访问时间' + stats.atime);
    // console.log('mtime:内容修改时间' + stats.mtime);
    // console.log('ctime:文件状态修改时间' + stats.ctime);
    // console.log('btime:创建时间' + stats.birthtime);
    console.log(stats.isFile());//判断是否为文件
    console.log(stats.isDirectory());//判断是否为路径
    console.log(2);
});
console.log(3);

由于提到了异步操作
    浏览器中的异步操作:
    1、定时函数(达到延时事件)
    2、事件函数(特定的事件触发)
    3、ajax回调函数(服务器数据相应的时候)

    异步任务触发条件:
    1、主线程空闲
    2、满足任务的触发条件

    js的运行是单线程的

    单线程+事件队列


// console.log(11);
// // 同步操作
// let ret = fs.statSync(path.join(__dirname,'data.txt'));
// console.log(ret);
// console.log(333);

stats 状态


 fs.stat(path.join(__dirname,'data.txt'),(err,stats) => {
     console.log(stats);
     if(!err && stats.isFile()){
         console.log('该文件存在');
     }else{
         console.log('该文件不存在');
     }
 });

文件操作

open:


/*
    文件操作
    fs.open(path, flags[, mode], callback)
    path  文件的路径
    flags  打开文件的方式   r-- w --
    mode  Linux平台有效,可以控制文件的读、写、可执行 777,参数是可选的
    callback 回调函数(err,fd)
*/

fd:

// fs.open(path.join(__dirname,'./data.txt'),'r',(err,fd) => {
//     // fd file discriptor 文件描述符,通过fd可以操作文件,默认从3开始,打开多次接着累加
//     if(err){
//         console.log(err);
//         return;
//     }
//     console.log(err,fd);
// });

// 同步方法的返回值表示fd
let ret = fs.openSync(path.join(__dirname,'./data.txt'),'r');
console.log(ret);

read:

    文件读操作
    fs.read(fd, buffer, offset, length, position, callback)
    fd 文件描述符
    buffer 读取的数据放到buffer中
    offset 读取的数据从buffer的第几个位置开始写
    length 读取文件中数据的字节数量
    position 从文件的什么位置开始读
    callback 回调函数(err,bytes,buffer)
const path = require('path');
const fs = require('fs');

// fs.open(path.join(__dirname,'./data.txt'),'r',(err,fd) => {
//     let buf = Buffer.alloc(5);
//     fs.read(fd,buf,1,3,null,(err,bytes,buffer) => {
//         console.log(err,bytes,buffer);//bytes表示读取的字节数量
//         console.log(buf);//读取的文件内容
//         console.log(buf == buffer);//buffer和read参数中的buf是同一份数据
//     });
// });

//同步操作
let fd = fs.openSync(path.join(__dirname,'./data.txt'),'r'); 
let buf = Buffer.alloc(5);
let ret = fs.readSync(fd,buf,0,4);
console.log(ret,buf);

write:

    文件写操作(浏览器中的js和Node.js中的js语法上都不支持方法重载,但是可以在定义函数时,根据参数的个数,和函数的类型进行判断,从而根据实参形式上的差别来区分实际的调用形式)
    fs.write(fd, buffer, offset, length[, position], callback)
    fs.writeSync(fd, buffer, offset, length[, position])

    fs.write(fd, data[, position[, encoding]], callback)
    fs.writeSync(fd, data[, position[, encoding]])
const path = require('path');
const fs = require('fs');
// 方法重载(方法名称相同,但是参数的个数不同,参数的类型不同)
// fs.open(path.join(__dirname, './data.txt'), 'w', (err, fd) => {
//     let buf = Buffer.from('中国');
//     // written指的是字节数量,而不是字符数量
//     fs.write(fd,buf,0,6,(err,written,buffer) => {
//         console.log(err,written,buffer);
//         console.log(buf === buffer);
//     });
// });

// fs.open(path.join(__dirname, './data.txt'), 'w', (err, fd) => {
//     // let buf = Buffer.from('中国');
//     fs.write(fd,'程序员',(err,written,str) => {
//         console.log(err,written,str);
//     });
// });

//tongbu
// let fd = fs.openSync(path.join(__dirname, './data.txt'), 'w');
// let buf = Buffer.from('中国');
// // let ret = fs.writeSync(fd,buf,0,6,null);
// let ret = fs.writeSync(fd,'程序员');
// console.log(ret);

readFile:

   文件读操作
    fs.readFile(file[, options], callback)
    file 表示文件名称或者文件描述符
    options 可以是字符串形式,表示编码;可以是对象形式(encoding,flag)
    callback 回调函数(err,data 实际读取的数据)

    fs.readFileSync(file[, options])
// 第二个参数指定编码,回调函数中的data是字符串,不指定的是Buffer
// fs.readFile(path.join(__dirname,'./data.txt'),(err,data)=>{
//     console.log(data.toString());
// });

// fs.readFile(path.join(__dirname,'./data.txt'),'utf8',(err,data)=>{
//     console.log(data);
// });

// let content = fs.readFileSync(path.join(__dirname,'./data.txt'),'utf8');
let content = fs.readFileSync(path.join(__dirname,'./data.txt'));
console.log(content);

writeFile:

    文件写操作
    fs.writeFile(file, data[, options], callback)
    data 写入的数据

    fs.writeFileSync(file, data[, options])
const path = require('path');
const fs = require('fs');

// fs.writeFile(path.join(__dirname,'./data.txt'),'hi',(err)=>{
//     console.log(err);
// });

fs.writeFileSync(path.join(__dirname,'./data.txt'),'中国');

appendFile:

   文件内容追加
    fs.appendFile(file, data[, options], callback)

    fs.appendFileSync(file, data[, options])
const path = require('path');
const fs = require('fs');

// fs.appendFile(path.join(__dirname,'./data.txt'),'程序员',(err)=>{
//     console.log(err);
// });

fs.appendFileSync(path.join(__dirname,'./data.txt'),'程序员');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值