Node中js的调用与fs模块

node中js的相互调用

js的导出:
node1.js(文件中):
   var multi=function(a,b){ 
   return a*b }     
   module.exports.multi=multi  //JavaScript中Module模式模拟了类的概念,用闭包封装了"私有"状态和方法 把乘法导出 
  //moudle的话是可以引出多个 直接写exports的话是单引出
js的引入:
node.js(文件中):
var chengfa=require('./node1').multi
console.log(chengfa(5,6)) //30

node与fs模块

fs全称为file system 文件系统,它的功能在服务端操作来说十分重要(通常是关于文件和文件夹的操作)
const fs=require('fs') //注意:使用fs模块需要先行引入
//fs模块建议异步操作(提高效率,防止阻塞)
读取 readFile:
fs.readFile('1.txt',{encoding:"utf-8"},function(err,data){//不编码则会变为16进制乱码
   if(err){ //错误返回
       return console.log(err)
   }
   console.log(data)//将1.txt内容拿出来
 })
复制 copyFile:
fs.copyFile('1.txt','11.txt',function(err){//将1.txt复制给11.txt(如果11.txt拥有内容,则被覆盖)
   if(err){ //错误返回
       return console.log(err)
   }
 console.log('复制完毕')
})
写入文件 writeFile:
fs.writeFile('1.txt','写入的内容',{encoding:"utf-8"},function(err){//覆盖原文件(1.txt.)的内容
   if(err){
       return console.log(err)
   }
 console.log('文件写入完成')
})
追加 appendFile:
fs.appendFile("1.txt","这是增添的东西",function(err){//给1.txt内容增加(没有1.txt 则会给你新建个2.txt并添加内容)
  if(err){
      return console.log(err)
  }
 console.log('文件追加成功')
})
删除 unlink(不允许删除文件夹):
fs.unlink('./1.txt',function(err){
  if(err)return console.log(err)
     console.log('文件删除成功')
})
创建目录 mkdir:
fs.mkdir('./foreignsmallmovie',function(err){//当前位置创建名为foreignsmallmovie的目录
    if(err)return console.log(err)
    console.log('文件自动创建成功')
})
读取目录 readdir(例如寻找文件夹中的js文件):
fs.readdir('./',function(err,files){
    if(err)return console.log(err)
    console.log(files)

files.forEach(function(item){//读取目录中后缀为js的文件
    if(path.parse(item).ext=='.js'){
    console.log(item)
    }
  })
})
判断当前路径是否为目录 stat:
fs.stat('1.txt',function(err,stats){
   if(err)return console.log(err)
   console.log(stats.isDirectory)
})
检查文件是否存在(同步方法) existsSync:
var result=fs.existsSync('1.txt')
console.log(result)//返回 true false
if(result){
   console.log('文件存在')
}
else{
   console.log('文件不存在哦')
}
文件监听器并返回监听事件类型和目标 watch watchFile:
fs.watch('./jq2(选择框).htm',function(event,filename){
   console.log(event,filename)
})

fs.watchFile('./jq1.htm',function(a,b){
   console.log(`当前的最近修改时间是: ${a.mtime}`);
   console.log(`之前的最近修改时间是: ${b.mtime}`);
})
更改名字(通常更改后缀名) rename:
fs.rename('1.txt','2.html',function(err){
   if(err)return console.log(err)
   console.log('更名完成')
})

复制文件的自我封装(两种方法尝试):
//复制文件的自我封装 方法1
fs.readFile('1.txt',{encoding:"utf-8"},function(err,data){
if(err){
    return console.log(err)
 }
 fs.appendFile('./1.txt',data,{encoding:"utf-8"},function(err){
    if(err){
        return console.log(err)
     }
     console.log('自我封装完成')
 })
})

//复制文件的自我封装 方法2
var copyFileByYe=function(src1,src2){
fs.readFile(src1,function(err,data){
    if(err)return console.log(err)//条件内容一行,可省略{}
        fs.writeFile(src2,data,function(err){
            if(err)return console.log(err)
            console.log('复制文件成功')
        })
   })
}
copyFileByYe('./1.txt','./2.txt')

改写文件的读写权限(同步方法) chmodSync:
fs.chmodSync(path, mode)
1. path        文件路径
2. mode        读写权限(如:0o777var fs = require('fs'),
fs.chmodSync("./processId.txt", 0o777);

         常量	       八进制值	 说明
fs.constants.S_IRUSR	0o400	所有者可读
fs.constants.S_IWUSR	0o200	所有者可写
fs.constants.S_IXUSR	0o100	所有者可执行或搜索
fs.constants.S_IRGRP	0o40	群组可读
fs.constants.S_IWGRP	0o20	群组可写
fs.constants.S_IXGRP	0o10	群组可执行或搜索
fs.constants.S_IROTH	0o4	其他人可读
fs.constants.S_IWOTH	0o2	其他人可写
fs.constants.S_IXOTH	0o1	其他人可执行或搜索
构造 mode 更简单的方法是使用三个八进制数字的序列( 例如 765)。 
最左边的数字(示例中的 7)指定文件所有者的权限。 
中间的数字(示例中的 6)指定群组的权限。 
最右边的数字(示例中的 5)指定其他人的权限。

数字	   说明
 7	可读、可写、可执行
 6	可读、可写
 5	可读、可执行
 4	只读
 3	可写、可执行
 2	只写
 1	只可执行
 0	没有权限

例如,八进制值 0o765 表示:
所有者可以读取、写入和执行该文件。
群组可以读和写入该文件。
其他人可以读取和执行该文件。
当使用期望的文件模式的原始数字时,任何大于 0o777 的值都可能导致不支持一致的特定于平台的行为。 
因此,诸如 S_ISVTXS_ISGIDS_ISUID 之类的常量不会在 fs.constants 中公开。

注意事项:在 Windows 上,只能更改写入权限,并且不会实现群组、所有者或其他人的权限之间的区别。

fs模块递归实现文件遍历:
//递归==》在自己的方法里去调用自己的方法
var num=0;
var auto=function(){
    num  
    //说明停止条件
    if(num==10) return
    auto()
}
------------------实例1------------------
const fs=require('fs')
const path=require('path')
//递归 在他里面调用他自己readdirl
var readdirl=function(dir){
fs.readdir(dir,function(err,files){
    // if(err) return console.log(err)
    //对所取元素进行遍历
    files.forEach(function(item){
        //拼接路径
        var lj=path.join(dir,item)
        //判断当前路径状态
        fs.stat(lj,function(err,stats){
            var stat=stats.isDirectory()
            // if(err)return console.log(err)
            //递归
            if(stat){
                readdirl(lj)
            }
            console.log(lj)
        })
     })
  })
}
readdirl('./')
------------------实例2------------------
const fs=require('fs')
const path=require('path')
var readdir_my=function(dir){
fs.readdir(dir,function(err,files){
   if(err&&err.code=='ENOTDIR'){
       console.log(dir)
   }
   else if(err&&err.code=='EPERM'){
    console.log(dir)
    }
    else if(err&&err.code=='EBUSY'){
        console.log(dir)
        }
   else{
       files.forEach(function(item){

        readdir_my(path.join(dir,item))
       })
     }
  })
}
readdir_my('F:')

点击了解更多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值