读取目录

语法

一下为读取目录的语言格式:

  1. fs.readdir(path, callback)

其实它帮我们也封装了不同系统下的它目录读取的的这个方式

参数

参数使用说明如下:

  • path - 文件路径
  • callback - 回调函数,回调函数带有俩个参数err,files;err为错误信息,files为目录下的文件数组列表。

首先获取fs模块

  1. let fs = require('fs')

示例

  1. let fs = require('fs')
  2. fs.readdir('./文件写入',function(err,files){//当前目录的fs1文件夹,没有得创建
  3. if(err){
  4. console.log(err)
  5. }else{
  6. console.log(files)
  7. }
  8. })

结果:

  1. []

这样你就可以快速的获取这个目录所有的信息,读取到后能使用循环一个一个可以进行查找、读取

在里面导入模块

文件写入 > 创建lcfs.js

  1. let fs = require('fs')
  2. function myFsReadFile(path){
  3. return new Promise(function(resolve,reject){
  4. fs.readFile(path,{flag:'r',encoding:'utf-8'},function(err,data){
  5. if(err){
  6. reject(err)
  7. }else{
  8. resolve(data)
  9. }
  10. })
  11. })
  12. }
  13. function myFsWriteFile(path,w,wm){
  14. return new Promise(function(resolve,reject){
  15. fs.writeFile(path,w,{flag:wm,encoding:'utf-8'},function(err){
  16. if(err){
  17. reject(err)
  18. }else{
  19. resolve(err)
  20. }
  21. })
  22. })
  23. }
  24. module.exports = {
  25. myFsReadFile,myFsWriteFile
  26. }

导出

  1. let {myFsReadFile,myFsWriteFile} = require('../文件写入/lcfs')

写入文件夹中完整的结构:

  1. let fs = require('fs')
  2. const { text } = require('stream/consumers')
  3. let {myFsReadFile,myFsWriteFile} = require('../文件写入/lcfs')
  4. fs.readdir('../文件写入',function(err,files){
  5. if(err){
  6. console.log(err)
  7. }else{
  8. console.log(files)
  9. let txtPath = 'all.txt'
  10. //循环的操作
  11. files.forEach(async function(filename,i){//item:filename;index(索引值):i
  12. //就可以读里面的内容
  13. let content = await myFsReadFile('../文件写入/' + filename)
  14. await myFsWriteFile(txtPath,content,'a')
  15. })
  16. }
  17. })

这样子我们就可以读取文件里面所有内容了

你需要查找文件里面的内容,也可以修改里面的内容:

  1. let fileName = 'index.js'
  2. //循环操作(查找)
  3. files.forEach(async function(filename,i){
  4. let content = await myFsReadFile('../文件写入/' + filename)
  5. if(fileName === filename){
  6. console.log(filename)
  7. }
  8. })

删除目录

语法

一下为删除目录的语法格式:

  1. fs.rmdir(path,callback)

参数

  • path - 文件路径
  • callback - 回调函数

示例

  1. let fs = require('fs')
  2. function deleteDirOne(path){
  3. return new Promise(function(resolve,reject){
  4. fs.rmdir(path,function(){
  5. console.log('删除成功')
  6. })
  7. })
  8. }
  9. deleteDirOne('./abc')

我们输入点内容都做不了这个事情

输入输出

导入一个包readline

  1. var readline = require('readline')

创建一个实例接口

  1. //实例化接口对象
  2. let rl = readline.createInterface({
  3. //输入输出都靠process这个里面的属性来做
  4. input: process.stdin,
  5. output: process.stdout,
  6. })

输入什么内容就可以以

事件的方式

来进行操作

question方法

提问事件

  1. //question方法
  2. rl.question("你的名字是?",function(answer){//answer:回答。可以输入内容回答
  3. console.log("我的名字是",answer);
  4. //不加close,则程序不会结束
  5. rl.close();
  6. })

如果我想关,就可以退出进程

  1. //close事件监听
  2. rl.on("close",function{
  3. //结束程序
  4. process.exit(0)
  5. })

readLinefs.writeFile来创建package.json文件

  1. let readline = require('readline')
  2. let {deleteDirOne} = require('./deleteDir')
  3. let {myFsWriteFile} = require('../文件写入/lcfs');
  4. const fs = require('fs');
  5. //实例化接口对象
  6. let rl = readline.createInterface({
  7. //输入输出都靠process这个里面的属性来做
  8. input: process.stdin,
  9. output: process.stdout,
  10. })
  11. //question方法
  12. /* rl.question("你想要删除的目录是?",function(answer){//answer:回答。可以输入内容回答
  13. deleteDirOne(answer)
  14. //不加close,则程序不会结束
  15. rl.close();
  16. })
  17. //close事件监听
  18. rl.on("close",function(){
  19. //结束程序
  20. process.exit(0)
  21. }) */
  22. //设置r1,提问事件
  23. async function createPackage(PackName){
  24. let name = await lcQuestion("你的包名叫什么?");
  25. let description = await lcQuestion("你的包如何描述?")
  26. let main = await lcQuestion("你的包主程序入口文件是什么?")
  27. let author = await lcQuestion("你的包作者是谁?")
  28. //这个判断目前有影响,建议删除
  29. /* if(PackName === "package.json"){//如果有package.json文件就删除这个文件
  30. await fs.unlink(PackName,function(){//删除文件异步API,记得async的方法里面,得用await不然不会停下来执行
  31. console.log('删除成功')//提示信息,连着创建使用等同于没有
  32. })
  33. }else{//没有文件就创建文件
  34. let content = `{
  35. "name": "${name}",
  36. "version": "1.0.0",
  37. "description": "${description}",
  38. "main": "${main}",
  39. "script": {
  40. "test": "echo \\"Error: no test specified\\" && exit 1"
  41. },
  42. "keywords": [
  43. "'LAOCHEN'"
  44. ],
  45. "author": "'${author}'",
  46. "license": "ISC",
  47. "dependencies": {}
  48. }`
  49. await myFsWriteFile(PackName,content,'w')//这个await与上面一致要求
  50. } */
  51. let content = `{
  52. "name": "${name}",
  53. "version": "1.0.0",
  54. "description": "${description}",
  55. "main": "${main}",
  56. "script": {
  57. "test": "echo \\"Error: no test specified\\" && exit 1"
  58. },
  59. "keywords": [
  60. "'LAOCHEN'"
  61. ],
  62. "author": "'${author}'",
  63. "license": "ISC",
  64. "dependencies": {}
  65. }`
  66. await myFsWriteFile(PackName,content,'w')
  67. //最终写完内容,关闭输入进程
  68. rl.close()
  69. }
  70. function lcQuestion(name){
  71. return new Promise(function(resolve,reject){
  72. rl.question(name,function(answer){
  73. resolve(answer)
  74. })
  75. })
  76. }
  77. createPackage('package.js')
  78. rl.on('close',function(){
  79. process.exit(0)
  80. })

效果(myFsWriteFile从哪里来可以看文件写入的那章):

  1. 你的包名叫什么?nodeReadLine_Learn
  2. 你的包如何描述?输入输出专用包
  3. 你的包主程序入口文件是什么?input.js
  4. 你的包作者是谁?cty

创建的package包

  1. {
  2. "name": "nodeJSReadLine_learn",
  3. "version": "1.0.0",
  4. "description": "输入输出专用包",
  5. "main": "input.js",
  6. "script": {
  7. "test": "echo \"Error: no test specified\" && exit 1"
  8. },
  9. "keywords": [
  10. "'LAOCHEN'"
  11. ],
  12. "author": "'cty'",
  13. "license": "ISC",
  14. "dependencies": {}
  15. }

可以用这种来写文件内容