1. 程式人生 > >Node[2] -- NODE中關於檔案的操作 fs模組的使用

Node[2] -- NODE中關於檔案的操作 fs模組的使用

參考張大神的這篇文章

主要使用的是node中的fs檔案系統的模組

1 圖片批量重新命名

var fs = require("fs");
var src = 'D:\Testing/img'; 
 //路徑寫了半天不對,原來是這麼寫的,如果進入的是子檔案,要用反斜線
 如果是一個,可以直接使用 var src = 'D:\images'; 
fs.readdir(src, function(err, files) {
    files.forEach(function(filename) {
        var oldPath = src + '/' + filename, 
            newPath = src + '/myImg_'
+ filename; fs.rename(oldPath, newPath, function(err) { if (!err) { console.log(filename + '圖片改名成功!'); } }) }); });

嘗試按照檔名稱重新排序

var fs = require("fs");
var src = 'D:\Testing/img';
fs.readdir(src, function(err, files) {
    files.forEach
(function(filename,index) { var imgEnd = filename.split("."); var oldPath = src + '/' + filename, newPath = src + '/myImgs_' + index + "."+ imgEnd[1]; fs.rename(oldPath, newPath, function(err) { if (!err) { console.log(filename + '圖片改名成功!'
); } }) }); });

效果如下
這裡寫圖片描述

解析:

node 中的 fs 模組是處理關於檔案的
其中的fs.readdir方法 用來讀取檔案目錄

fa.readdir(' 檔案路徑 ',function(err,file){
  if(err){
    console.log(err) 
  }else{
     console.log(file)
  }
   //files是一個包含 “ 指定目錄下所有檔名稱的” 陣列
})

fs.rename 方法

用來修改檔名稱,可更改檔案的存放路徑。

參考例項

//同以目錄下的檔案更名:
var fs = require('fs');
fs.rename('125.txt','126.txt', function(err){
 if(err){
  throw err;
 }
 console.log('done!');
})

//不同路徑下的檔案更名 + 移動:(新的路徑必須已存在,路徑不存在會返回異常)
var fs = require('fs');
fs.rename('125.txt','new/126.txt', function(err){
 if(err){
  throw err;
 }
 console.log('done!');
})

2 node 分割靜態頁面

【經常寫靜態的福利】

程式碼在這裡就不在貼了,和張大神的一樣,需要注意的是
這個正則

/<link\srel="import"\shref="(.*)">/gi

對應頁面中查詢的是<link rel="import" href="header.html">

一個空格 而且末尾沒有斜槓

由於我I是一個亂敲空格的人【捂臉】,所以把這個正則改了

data.replace
(/<link\s+rel="import"\s+href="(.*)"\s*\/?>/gi, ...)

這樣對應的html文件應該是 ,哦,還加了一個斜槓

<link rel="import" href="header.html" />

然後就是注意這個檔案目錄問題,
這裡寫圖片描述

需要組裝的字程式碼的檔案放在一個資料夾,但是與你要 NODE 的 import.js 不是同級關係
反正我是在這裡摔倒了

這裡寫圖片描述

3 NODE靜態頁面分割擴充套件

因為需要控制的頁面不只一個,所以在這個部分就不太合適了,
這裡寫圖片描述

這裡是只是寫了一個檔案。所以需要改動成,監控所有子靜態塊

於是用了一個 fs.readdir 去讀取資料夾中所有 html檔案

改動之後的import。js 內容如下

// 引入fs檔案處理模組
var fs = require("fs");

// 測試用的HTML頁資料夾地址和檔名稱
var src = 'import';

//這裡讀取所有的檔案出來
fs.readdir(src, function(err, files) {
    files.forEach(function(filename,index) {
        var filename = filename;
        // 預設先執行一次
        fnImportExample(src, filename);


// 監控檔案,變更後重新生成
fs.watch(src + '/' + filename, function(event, filename) {
    if (event == 'change') {
        console.log(src + '/' + filename + '發生了改變,重新生成...');
        fnImportExample(src, filename);
    }
});        


   });
});

var fnImportExample = function(src, filename) {
    // 讀取HTML頁面資料
    // 使用API文件中的fs.readFile(filename, [options], callback)
    fs.readFile(src + '/' + filename, {
        // 需要指定編碼方式,否則返回原生buffer
        encoding: 'utf8'
    }, function(err, data) {
        // 下面要做的事情就是把
        // <link rel="import" href="header.html">
        // 這段HTML替換成href檔案中的內容
        // 可以求助萬能的正則
        var dataReplace = data.replace(/<link\srel="import"\shref="(.*)">/gi, function(matchs, m1) {
            // m1就是匹配的路徑地址了
            // 然後就可以讀檔案了
            return fs.readFileSync(src + '/' + m1, {
                encoding: 'utf8'
            });
        });

        // 由於我們要把檔案放在更上一級目錄,因此,一些相對地址要處理下
        // 在本例子中,就比較簡單,對../進行替換
        dataReplace = dataReplace.replace(/"\.\.\//g, '"');

        // 於是生成新的HTML檔案
        // 文件找一找,發現了fs.writeFile(filename, data, [options], callback)
        fs.writeFile(filename, dataReplace, {
            encoding: 'utf8'
        }, function(err) {
            if (err) throw err;
            console.log(filename + '生成成功!');
        });
    });
};




最近寫了一個檔案批量重新命名的包,發到npm上了