文件系统fs

重命名

  1. fs.rename()
  2. fs.renameSync
  • 优先选择异步,可以进行异常判断

打开关闭文件

  1. fd = fs.openSync(file, flags)
  2. fs.closeSync(fd)
  3. //
  4. fs.open(file, flags, function (fd) {
  5. fs.close(fd, function(err) {
  6. })
  7. })
  • 当打开或新建文件时,内核向进程返回一个文件描述符fd`
  • flags表示打开模式: 'r'以读取模式打开,'w' 以读取模式打开,不存在则创建,'a' 以追加模式打开,不存在则创建

截取文件内容

  • 仅剩字符串长度len的内容,默认为0即全部截取
  1. var fd = fs.openSync(file, frag)
  2. fs.ftruncateSync(fd, len)
  3. fs.closeSync(fd);
  4. //
  5. var fd = fs.openSync(file, frag)
  6. fs.ftruncate(fd, len, function (err) {
  7. fs.closeSync(fd);
  8. })

修改文件长度

  1. fs.truncateSync(file, len)
  2. //
  3. fs.truncate(file, len, function (err) {
  4. })
  • 此方法与fs.ftruncate类似,但可以直接通过路径修改文件

获取文件信息

  • stat\statSync
  1. var fs = require('fs')
  2. fs.stat(path, function (err, stats) {
  3. console.log('是否为文件:', stats.isFile());
  4. console.log('是否为目录:', stats.isDirectory());
  5. console.log('读写权限是:', stats.mode);
  6. console.log('文件大小是:', stats.size);
  7. console.log('访问时间是:', stats.atime);
  8. console.log('修改时间是:', stats.mtime);
  9. console.log('创建时间是:', stats.ctime);
  10. console.log('所有权用户ID :', stats.uid);
  11. console.log('所有权群组ID:', stats.gid);
  12. })
  • fstat\fstatSync

更改文件所有权

  • fs.chown(path, uid, gid, callback)/chownSync
  • fs.fchown(fd, uid, gid, callback)/fchowmSync
  • 更改文件所有权的操作需要用户有一定权限

更改文件权限

  • fs.chmod(path, mod, callback)/chmodSync
  • fs.fchmods(fd, mod, callback)/fchmodSync
  • 直接修改权限: chmod mod path ; 查看相应文件权限: ls -lh path
  1. Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他
  2. r 表示可读取,w 表示可写入,x 表示可执行
  3. r=4w=2x=1
  4. 若要rwx属性则4+2+1=7
  5. 若要rw-属性则4+2=6
  6. 若要r-x属性则4+1=7
  7. chmod ug=rwx,o=x path等同chmod 771 path
  8. 600 (只有所有者有读和写的权限)
  9. 644 (所有者有读和写的权限,组用户只有读的权限)
  10. 700 (只有所有者有读和写以及执行的权限)
  11. 666 (每个人都有读和写的权限)
  12. 777(每个人都有读和写以及执行的权限)

文件硬链接

  • 创建文件新的副本而不是符号链接,它引用的是文件的物理数据而不是文件结构位置
  • 只能引用同一系统的文件
  • 修改其中一个文件会互相影响,即使原文件重命名
  • 删除移动原文件不会影响副本
  1. fs.link(srcpath, dstpath, callback)/ fs.linkSync
  2. fs.unlink(scrpath, dstpath, callback)/fs.unlinkSync

文件符号链接

  • 软链接,一类特殊文件,包含另一个文件的路径名,仅仅是个快捷方式
  • 可以链接不同系统的文件
  • 修改其中一个文件会互相影响
  • 删除移动重命名原文件都会影响软链接
  1. //创建
  2. fs.symlink(srcpath, dstpath, callback)/ fs.symlinkSync
  3. //读取,不是有效文件符号链接会出错
  4. fs.readlink(dstpath, callback)/ fs.readlinkSync

相对路径转绝对路径

  • fs.realpath(path, [opetion], callback)/realpathSync

文件夹

  • 创建: mkdir/mkdirSync
  • 删除: rmdir/rmdirSync
  • 读取: readdir/readdirSync 返回文件目录数组

文件

  • 判断文件或文件夹是否存在: fs.exists(path, function (result) {})/fs.existsSync
  • 读取文件内容
  1. //readFile/readFileSync
  2. fs.readFile(path, callback)/fs.readFileSync
  3. //read/readSync
  4. fs.open('1.txt', 'r', function (err, fd) {
  5. fs.fstat(fd, function (err, stat) {
  6. var buf = new Buffer(stat.size), bytesRead = 0;
  7. var length = fs.read(fd, buf, bytesRead, buf.length, null, function (err, bytesRead, buffer) {
  8. console.log(err, bytesRead, buffer.toString());
  9. fs.close(fd);
  10. });
  11. })
  12. })
  • 写文件
  1. //writeFile/writeFileSync
  2. fs.writeFileSync(path, data);
  3. //write/writeSync
  4. fs.open('1.txt', 'w', function (err, fd) {
  5. var buf = new Buffer('aaa');
  6. fs.write(fd, buf, 0, buf.length, null, function (err, bytesRead, buffer) {
  7. console.log(bytesRead, buffer.toString());
  8. fs.close(fd);
  9. })
  10. })
  • 追加写文件: fs.appendFile/fs.appendFileSync

  • 监控文件: 注意这两个方法针对不同的系统平台使用起来不是很稳定

  1. fs.watchFile('1.txt', function (curr, prev) {
  2. console.log(curr, prev);
  3. })
  4. fs.watch('1.txt', function (event, filename) {
  5. console.log(event);
  6. console.log(filename);
  7. })

路径处理

字符串路径

  • 规范字符串路径: path.normalize 过滤多余/,处理./,../
  • 合并字符串路径: path.join 包括规范字符串路径处理
  • 解析绝对路径: path.resolve: 包括规范和合并字符串路径
  • 解析相对路径: path.relative: 包括规范和合并字符串路径

获取文件夹路径

  1. //根据已经得到的文件名称,获得该文件所在文件夹绝对路径
  2. path.dirname(path.resolve('1.txt'))

获取文件扩展名:

  • path.extname 格式.xxx

获取路径中最后部分

  1. path.basename('a/b/test.txt'); //c
  2. path.basename('a/b/test.txt', 't.txt'); //tex

url路径解析和格式化

  1. url.parse
  2. url.format

url路径转化

  • 原有url路径上增加或替换标签
  • 如果原urlhref类型,则会插入或替换以最后一个/为基础
  • 如果原url/开头,则插入或替换标签以/开头会完全替换
  1. console.log(url.resolve('/a/b', 'c')); // /a/c
  2. console.log(url.resolve('/a/b', '/c')); // /c
  3. console.log(url.resolve('/a/b/', 'c')); // /a/b/c
  4. console.log(url.resolve('/a/b/', '/c')); // /c
  5. console.log(url.resolve('http://xxx.com/a', 'c')); // http://xxx.com/c
  6. console.log(url.resolve('http://xxx.com/a', '/c')); // http://xxx.com/c
  7. console.log(url.resolve('http://xxx.com/a/', 'c')); // http://xxx.com/a/c
  8. console.log(url.resolve('http://xxx.com/a/', '/c')); // http://xxx.com/c

转化url的query参数

  1. var querystring = require('querystring')
  2. querystring.parse(url)

nodejs复习03的更多相关文章

  1. nodejs复习02

    process 这个模块是单线程的,无法完全利用多核CPU 基本信息 //程序目录 process.cwd(); //应用程序当前目录 process.chdir('/home'); //改变应用程序 ...

  2. nodejs复习01

    console 格式化 console.log("%s:%s", "a", "b") //字符串 console.log("%d. ...

  3. nodejs复习05

    stream 可读流 fs.pause()方法会使处于流动模式的流停止触发data事件,切换到非流动模式并让后续数据流在内部缓冲区 var fs = require('fs') var rs = fs ...

  4. nodejs复习04

    TCP/UDP网络应用 创建TCP服务器客户端 socket套接字对象实例,是对TCP协议的一个基本封装接口 clientt套接字对象实例 //server.js var net = require( ...

  5. C#基础总复习03

    继续更新...接下来就是面向对象的知识了 1.面向对象:概念:使用面向对象的思想进行编程可以让的程序变得扩展性更高,便于维护: 我们在现实生活中去描述一个人的时候,通过描述这个人的特征和行为. 我们在 ...

  6. NIO复习03

    SocketChannel: 1. Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChan ...

  7. nodeJs学习-03 GET数据请求,js拆解/querystring/url

    原生JS解析参数: const http = require('http'); http.createServer(function(req,res){ var GET = {}; //接收数据容器 ...

  8. nodejs+websocket制作聊天室视频教程

    本套教程主要讲解了node平台的安装,node初级知识.node 服务器端程序响应http请求,通过npm安装第三方包,websocket即时通讯.聊天页面界面制作.拖动原理.拖动效果.遮罩效果.定位 ...

  9. 编译原理--02 自顶向下、自底向上的LR分析复习(清华大学出版社第3版)

    前言 目录 01 文法和语言.词法分析复习 02 自顶向下.自底向上的LR分析复习 03 语法制导翻译和中间代码生成复习 04 符号表.运行时存储组织和代码优化复习 第4章 自顶向下的语法分析方法 确 ...

随机推荐

  1. 【ZOJ 3929】Deque and Balls(普通dp)

    题意:给出一个序列,按照顺序一个一个放入双端队列(可以放在头部也可以放在尾部),一个队列的美丽指数就是数列中a[i]>a[i+1]的个数,求美丽指数的期望*2^n的值. 解题思路:方便起见,我们 ...

  2. 目标电脑未安装VC++6.0或者VS,运行APP丢失DLL问题解决办法

    一.背景 VS或者VC++6.0编译出来的程序需要在未安装VS/VC++6.0的电脑上跑,很大情况会出现MSVCRXXX.dll 或者其他DLL丢失的情形,本篇就DLL相关问题做个记录. 二.正文 1 ...

  3. 深入浅析JAVA注解

    注解,相信大家都会知道,像@requestMapping,@Resource,@Controller等等的一些注解,大家都用过,那么,他的工具类你用过吗?下面就和大家一起来分享一下注解工具类. 注解的 ...

  4. Distinct Subsequences

    https://leetcode.com/problems/distinct-subsequences/ Given a string S and a string T, count the numb ...

  5. Activity系列讲解---三大基本状态与七大生命周期函数

    简介:四大组件之一,在应用中一个Activity可以用来表示一个界面,可以理解为用户可视化界面,一个android应用必须通过Activity来运行和启动. 1.三大基本状态与七大生命周期函数 2.代 ...

  6. 用open_gapps安装google play

    说明  一个开放源码脚本自动生成最新的谷歌应用程序包.对整个google play 程序框架的打包,包括一些google官方的程序.对于阉割了google ply用户来说是一个不错的选择. 使用 下载 ...

  7. C语言小结

    1.输入输出: char s; printf("Enter a string"); scanf("%s",&s); printf(''Hello,%s& ...

  8. Android studio安装

    1.首先上甲骨文公司的官方网站下载JDK的安装包,根据自己电脑的操作系统选择正确的版本下载.不知道下载地址的同学可以百度一下很快就能搜到.下载还的安装包如下图所示. 2.点击下载好的JDK安装程序,百 ...

  9. HTML5 绘制简单圆形 loading. . . .

    现在有很多的 loading 组件 什么js 等等 闲来没事就写一个 H5的 loading  有很多的Loading 是一张张图片 js 控制的  有了 canvas的 出现 你就可以体验不同之处了 ...

  10. Android-LinearLayout(线性布局)

    布局:Android为我们提供了一个View和ViewGroup子类的集合.ViewGroup类是View的子类,也被称为Layout布局,它提供了流式布局.线性布局等多种布局方式.View是绘制在屏 ...