1. var fs = require('fs');
    2. var path = require('path');
    3. var loadPath;
    4. var savePath;
    5. process.argv.forEach((val, index) => {
    6. console.log(`${index}: ${val}`);
    7. if (index === 2) {
    8. loadPath = val;
    9. }
    10. if (index === 3) {
    11. savePath = val;
    12. }
    13. });
    14. if (!loadPath) {
    15. console.log('请输入要打开的文件地址');
    16. return;
    17. }
    18. var lineStr = '';
    19. var selectList = [];
    20. var selectKey = '文章';
    21. var fsRead = function (fd, buffer) {
    22. //每一个汉字utf8编码是3个字节,英文是1个字节
    23. fs.read(fd, buffer, 0, 255, null, function (err, bytesRead, buffer) {
    24. if(err) {
    25. throw err;
    26. } else {
    27. let str = '';
    28. if (bytesRead === 255) {
    29. str = buffer.toString();
    30. console.log(buffer.toString());
    31. } else {
    32. str = buffer.slice(0, bytesRead).toString();
    33. console.log(bytesRead);
    34. console.log(buffer.slice(0, bytesRead).toString());
    35. }
    36. if (lineStr) {
    37. str += lineStr;
    38. }
    39. let strList;
    40. let isNotLine = false;
    41. if (!str.includes('\n')) {
    42. // 没有换行符号
    43. lineStr = str;
    44. isNotLine = true;
    45. } else if (str[str.length - 1] === '\n') {
    46. lineStr = '';
    47. // 最后一个值是换行符号
    48. } else {
    49. // 被换行父分割
    50. strList = str.split('\n');
    51. lineStr = strList[strList.length - 1];
    52. }
    53. let len = 0;
    54. if (strList) { // 被换行符分割过了。
    55. len = strList.length - 1;
    56. } else if (!isNotLine) { // 刚好分割完
    57. strList = str.split('\n');
    58. len = strList.length;
    59. }
    60. if (strList) {
    61. for (let i = 0; i < strList.length - 1; i +=1) {
    62. const item = strList[i]
    63. if (item.includes(selectKey)) {
    64. selectList.push(item);
    65. }
    66. }
    67. }
    68. if (bytesRead === 255) {
    69. fsRead(fd, buffer);
    70. } else {
    71. console.log(selectList.join('\n'));
    72. }
    73. }
    74. });
    75. }
    76. if (loadPath[0] !== '/') {
    77. loadPath = path.join(__dirname, loadPath);
    78. }
    79. fs.open(loadPath, 'r', function (err, fd) {
    80. if(err) {
    81. console.error(err);
    82. return;
    83. } else {
    84. var buffer = Buffer.alloc(255);
    85. fsRead(fd, buffer);
    86. }
    87. });
    88. console.log('>>>>>>>>>>>>>>')
    89. fs.readFile(path.join(__dirname, loadPath), (err, data) => {
    90. if (err) throw err;
    91. // console.log(data.toString());
    92. var text = data.toString();
    93. text.replace(/\/\/(.)*\n/g, '');
    94. if (savePath) {
    95. fs.writeFile(path.join(__dirname, savePath), data, (err) => {
    96. if (err) throw err;
    97. console.log('文件已被保存');
    98. });
    99. }
    100. });
    1. function getDirPath(dirStr) {
    2. const paths = [];
    3. const dirs = dirStr.split('/');
    4. const isTop = dirStr.split('')[0] === '/';
    5. dirs.forEach((item, index) => {
    6. if (!item) {
    7. return
    8. }
    9. if (index === dirs.length - 1 && item.includes('.')) {
    10. return
    11. }
    12. if (paths.length === 0) {
    13. if (isTop) {
    14. paths.push(`/${item}`)
    15. } else {
    16. paths.push(`${item}`)
    17. }
    18. return
    19. }
    20. paths.push(`${paths[paths.length - 1]}/${item}`)
    21. })
    22. return paths
    23. }