• node基础,fs(一)


     

    nodejs实现规范
    CommonJS : 规范JavaScript语言作为后端语言运行的标准
    
    具备什么能力,该怎么做 ,比如: 具备服务器的功能/ 可以操作文件 .....
    
    模块应该怎么写: Module :
    
    1:依赖一个模块 require('模块名(id)')
    
    2: 需要被模块依赖 module.exports = 给外部的数据
    
    3:一个文件是一个模块
    #### 核心对象path
    
    * 1:`const path = require('path');`
    * 路径 -> 在处理路径的时候很擅长,但是,其不负责判断路径是否存在文件
    * 拼接并修正路径 `path.join(__dirname,'a','b');` 以当前目录/a/b
    * ```path.resovle('./xxx') 相对转绝对```
    * 接收一个合法的路径字符串,转换成一个对象
      - `let pathObj = path.parse(mypath);`
    * 接收一个路径对象,转换成一个字符串路径
      - `let str = path.format(pathObj);`

    path1.js   node path1.js

    // 引入核心对象
    const path = require('path');  // path没有写路径(核心对象)
                                  // path在node.exe里面
                                
    // 3段路径来自不同用户的输入    //one//    two      ///three ///
    
    // 拼接路径
    const myPath = path.join(__dirname,'//one//','//two//','//three///');
    
    // console.log(myPath);  //  前面的绝对路径one	wo	hree
    
    // 根据相对路径,返回绝对路径
    // 对程序说 ./xxx.js 非要一个绝对路径 
    
    const str = '.\abc\efg.js';
    let temp = path.resolve(str);
    console.log(temp);  //  前面的绝对路径abcefg.js
    
    // 总结,join和resolve函数功能一样,返回绝对路径

    path2.js

    // 接受一段字符串路径
    const path = require('path');
    let myPath = path.join(__dirname,'jack','rose','mick.txt');
    
    // 解析这个路径为对象,更易于操作
    let pathObj = path.parse(myPath);
    console.log(pathObj);
    
    // base可以作为修改文件名,或后缀的方式
    pathObj.base = 'mick_die.good';
    
    // 接收路径对象,转换成路径字符串
    myPath = path.format(pathObj);
    console.log(myPath);

    打印pathObj

     打印myPath

    D:vue2.5开发去哪儿网01-Node.js基础+项目实战(18年9月最新)01-NodeJS基础-第1天-{ 全局、核心对象、异步IO }
    12课 NodeJS基础-第1天-{ 全局、核心对象、异步IO }01-NodeJS基础-第1天-{ 全局、核心对象、异步IO }codejack osemick_die.good

    总结

    __注意:path对象是方便我们操作路径的,对于获取来讲: parse解析成对象,  format转换成字符串.  join拼接并修正.... 对于修改路径对象来讲,可以用base属性更改,不能用name,ext更改__
    ### fs文件模块
    
    - 文件读写
    - 其他功能
    - 扩展介绍

    file.js, 异步读取

    // 引入核心对象 fs
    const fs = require('fs');
    
    //读取文件,读取相对file.js同级的./a.txt文件                           
    fs.readFile('./a.txt','utf8',(err,data)=>{
        if (err) throw err; // 抛到控制台显示异常信息
        // console.log(data);  //buffer类型数据,二进制
        // 需要获取字符串数据,就可以调用 buffer篮子.toString(编码)函数,默认urf8可以不传递
        console.log(data.toString('utf8'));  
    
    });
    
    //  I or O?
    //  I input 计算机来说,就是输入
    //  O output 计算机来说 ,展现/写入数据就是输出//  fs.writeFile(path,data||string,callback);
    // 向a.txt文件写入'我今天赚了2块钱'
    // {flag:'a'},就是追加数据,没标识就是写入数据
    fs.writeFile('./a.txt','我今天赚了2块钱', {flag:'a'},(err)=>{
      // window中目录层级超级深的时候,写入会报错
      if(err) throw err;
      console.log('写文件完成了');
    });
    
    // 追加方式1: appendFile('path',data,callback);
    // fs.appendFile('./a.txt','我今天赚了1块钱',(err)=>{
    //     if(err) throw err;
    //     console.log('文件追加成功');
    // });

    file2.js,   同步读取

    // 引入核心对象
    const fs = require('fs');
    
    
    // 先读后写  (有异常catch)
    let data = fs.readFileSync('./a.txt','utf8');
    console.log(data);
    // 写入到b.txt(有异常catch)
    fs.writeFileSync('./b.txt',data);
    console.log('文件复制成功');

    同步和异步区别

    node中有两种IO的操作
    
    * 同步IO
    
      * 一行代码(读文件)不执行完毕...后续代码不能执行
    
    * 异步IO (建议)
    
      * 一行代码(读写文件) 不执行完毕(正在读写中) ... 后续代码也可以执行
    const mypath = 'C:/Users/Administrator/Desktop/nba.mp4'
    const fs = require('fs');
    
    
    console.log('同步读取前..');
    fs.readFileSync(mypath);
    console.log('工作A...');  //被堵住了,过一会才输出
    console.log('读取成功了');
    
    
    console.log('异步读取前..');
    // // 异步读取
    fs.readFile(mypath,()=>{
      console.log('异步读取后..');
    });
    console.log('工作B...');  //没有堵住,立刻输出

    复习(遍历文件夹下的文件)

    • 读取文件夹,获取其中所有文件的资源

    • stat 获取文件状态

    • readdir 读取文件夹数据

    • access 判断文件或文件夹是否存在

    // 接收命令行参数,根据该目录,读取目录下的所有文件并输出(遍历文件夹)
    const path = require('path');
    const fs = require('fs');
    
    // 1: 接收命令行参数  node ./01_read_dir_files.js .//xxx//xxx//xx
    // 2: 修正该路径 path.resolve(process.agrv[2]),用户输入路径可能是相对路径
    let inputPath = path.resolve(process.argv[2]);
    // 3: 判断该路径是否存在 fs.access(fs.constants.F_OK)
                            // ./a/b
      function testReadFiles(dir) {   //  ./a/b
        try {
            // 同步api
            fs.accessSync(dir, fs.constants.F_OK);  //判断该路径文件/文件是否存在
            let state = fs.statSync(dir); //获取文件状态
            if (state.isFile()) {  //是文件
                console.log(dir);
            } else if (state.isDirectory()) {  //是文件夹
              
                let files = fs.readdirSync(dir);  // 读取文件夹数据,是个文件名数组   
                // 遍历文件夹,读取子文件
                files.forEach( file => {
                    // 递归调用,拼接路劲
                    testReadFiles(path.join(dir,file)); 
                });
            }
        } catch (e) {
            console.log(e);
            console.log('该文件或文件夹不存在!');
        }
    }
    
    // 只判断一次
    // fs.accessSync(dir, fs.constants.F_OK);
    testReadFiles(inputPath);  //传入文件路劲
  • 相关阅读:
    POJ 3660 Cow Contest 任意两点之间的关系 Floyd
    CDOJ 1146 A
    TTTTTTTTTTTTTT CDOJ Sliding Window 线段树(nlogn)或双端队列(n) 模板
    CDOJ 203 并查集+优先队列 好题
    CDOJ 1073 线段树 单点更新+区间查询 水题
    CDOJ 1070 秋实大哥打游戏 带权并查集
    CDOJ 1063 堆排序模板
    CDOJ 1069 秋实大哥去打工 单调栈 下标处理
    CDOJ 1061 C
    巨蟒python全栈开发django14:Form组件
  • 原文地址:https://www.cnblogs.com/fsg6/p/14503271.html
Copyright © 2020-2023  润新知