本文實例講述了NodeJS遍歷文件生產文件列表功能。分享給大家供大家參考,具體如下:
功能需求:在工作中我們可能經常需要知道項目中靜態文件列表發布,一個一個去檢索寫,那就太苦逼了。
要想知道里面的文件列表是不是很蛋疼,可能我們也會有dos tree去獲取。
這里分享一下,通過node,知道文件路徑,並配置遠程路徑,直接copy,發布。
新建filelist.js 里面都有注釋,我就不哆嗦了.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
var
fs = require(
"fs"
);
//path模塊,可以生產相對和絕對路徑
var
path = require(
"path"
);
//配置遠程路徑
var
remotePath =
"/resource/fd/promote/201507/qixi/"
;
//獲取當前目錄絕對路徑,這里resolve()不傳入參數
var
filePath = path.resolve();
//讀取文件存儲數組
var
fileArr = [];
//讀取文件目錄
fs.readdir(filePath,
function
(err,files){
if
(err){
console.log(err);
return
;
}
var
count = files.length;
//console.log(files);
var
results = {};
files.forEach(
function
(filename){
//filePath+"/"+filename不能用/直接連接,Unix系統是”/“,Windows系統是”\“
fs.stat(path.join(filePath,filename),
function
(err, stats){
if
(err)
throw
err;
//文件
if
(stats.isFile()){
if
(getdir(filename) ==
'html'
){
var
newUrl=remotePath+filename;
fileArr.push(newUrl);
writeFile(fileArr);
}
// (getdir(filename) == 'html')&&(fileArr.push(filename);writeFile(newUrl));
// console.log("%s is file", filename);
}
else
if
(stats.isDirectory()){
// console.log("%s is a directory文件目錄", filename);
//返回指定文件名的擴展名稱
//console.log(path.extname("pp/index.html"));
if
(filename ==
'css'
|| filename ==
'images'
){
//var readurl = filePath+'/'+filename;
//filePath+"/"+filename不能用/直接連接,Unix系統是”/“,Windows系統是”\“
// console.log(path.join(filePath,filename));
var
name = filename;
readFile(path.join(filePath,filename),name);
}
}
});
});
});
//獲取后綴名
function
getdir(url){
var
arr = url.split(
'.'
);
var
len = arr.length;
return
arr[len-1];
}
//獲取文件數組
function
readFile(readurl,name){
console.log(name);
var
name = name;
fs.readdir(readurl,
function
(err,files){
if
(err){console.log(err);
return
;}
files.forEach(
function
(filename){
// console.log(path.join(readurl,filename));
fs.stat(path.join(readurl,filename),
function
(err, stats){
if
(err)
throw
err;
//是文件
if
(stats.isFile()){
var
newUrl=remotePath+name+
'/'
+filename;
fileArr.push(newUrl);
writeFile(fileArr)
//是子目錄
}
else
if
(stats.isDirectory()){
var
dirName = filename;
readFile(path.join(readurl,filename),name+
'/'
+dirName);
//利用arguments.callee(path.join())這種形式利用自身函數,會報錯
//arguments.callee(path.join(readurl,filename),name+'/'+dirName);
}
});
});
});
}
// 寫入到filelisttxt文件
function
writeFile(data){
var
data = data.join(
"\n"
);
fs.writeFile(filePath+
"/"
+
"filelist.txt"
,data+
'\n'
,
function
(err){
if
(err)
throw
err;
console.log(
"寫入成功"
);
});
}
|
當我們執行
1
|
node flielist.js
|
就會生產filelist.txt,文件里面就包含了我們想要的路徑。
有時,我們通常遇到刪除不了的文件,由於文件縱深太長導致 rm _rf也刪不了,但是我們通過nodejs可以辦到:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
var
fs = require(
"fs"
);
var
path = require(
"path"
);
deleteFolderRecursive =
function
(url) {
var
files = [];
//判斷給定的路徑是否存在
if
( fs.existsSync(url) ) {
//返回文件和子目錄的數組
files = fs.readdirSync(url);
files.forEach(
function
(file,index){
// var curPath = url + "/" + file;
var
curPath = path.join(url,file);
//fs.statSync同步讀取文件夾文件,如果是文件夾,在重復觸發函數
if
(fs.statSync(curPath).isDirectory()) {
// recurse
deleteFolderRecursive(curPath);
// 是文件delete file
}
else
{
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(url);
}
else
{
console.log(
"給定的路徑不存在,請給出正確的路徑"
);
}
};
deleteFolderRecursive(
"./grunt"
);
|
希望本文所述對大家nodejs程序設計有所幫助。