2016年7月9日 星期六

OS、File System、Readline (Node.js 4)

※OS

取得作業系統資訊
官網連結


const os = require('os');
    
console.log('EOL=' + os.EOL);
console.log('arch=' + os.arch());
console.log('endianness=' + os.endianness());
console.log('freemem=' + os.freemem());
console.log('homedir=' + os.homedir());
    
console.log('hostname=' + os.hostname());
console.log('loadavg=' + os.loadavg());
console.log('networkInterfaces=' + os.networkInterfaces());
console.log('platform=' + os.platform());
console.log('release=' + os.release());
    
console.log('tmpdir=' + os.tmpdir());
console.log('totalmem=' + os.totalmem());
console.log('type=' + os.type());
console.log('uptime=' + os.uptime() + '\r\n');
    
// 取得所有屬性
for(var i in os.cpus()){
    console.log(os.cpus()[i]);
}
    
/*
上面的for in和下面的for of一樣,比較少人用,差在console.log裡面可少打一點
這個例子的結果是一樣的,但如果是陣列,for of只會抓初始值
for(var i of os.cpus()){
    console.log(i);
}
*/
    
console.log('\r\n');
// 知道有什麼屬性後,可以取得個別屬性
for(var j=0; j<os.cpus().length; j++){
    console.log(os.cpus()[j].model);
    console.log(os.cpus()[j].speed);
    console.log(os.cpus()[j].times.user);
    console.log(os.cpus()[j].times.sys + '\r\n');
}

※cpus是抓全部的CPU,像我有兩顆



※File System

檔案系統操作,分成同步和非同步,同步不會有最後的Callback參數,可以使用try/catch處理
官網連結


※unlink

非同步的刪除檔案
const fs = require('fs');
    
var path = 'C:\\fsTest.txt';
fs.unlink(path, (err) => {
    if (err) throw err;
    console.log('err=' + err);
    console.log('刪除' + path + '成功');
});
console.log('xxx');

※unlinkSync

同步的刪除檔案
const fs = require('fs');
    
var path = 'C:\\fsTest.txt';
fs.unlinkSync(path);
console.log('刪除' + path + '成功');
console.log('xxx');

※如果有錯誤訊息是權限不夠,就要用有權限的來執行

※注意xxx的執行時機,圖第一個執行的是同步,第二個執行的是非同步

※其他如rename、rmdir、mkdir、readFile、writeFile、appendFile…等,都有分同步/非同步,用法都差不多


※寫檔

const fs = require('fs');
    
// 準備好要寫的資料
var content = '';
content += '1, 2, 3, 4, 5 \r\n';
content += 'a, b, c, d, e \r\n';
    
// 已經有目錄不會報錯,目錄內的檔案也不會增加或減少
var path = '.\\123';
fs.mkdir(path, ()=>{});
    
// 再執行一次會覆蓋原有的內容
fs.writeFile(path + '\\data.txt', content, 'utf8', (err) => {
    if (err) throw err;
    console.log('已存檔!');
});


※增加內容到檔案的最後面

const fs = require('fs');
    
// 準備好要寫的資料
var content = '';
content += '0, 9, 8, 7, 6 \r\n';
content += 'z, y, x, w, v \r\n';
    
var path = '.\\123';
fs.mkdir(path, ()=>{});

// 沒有檔案也會創建新檔案喔!
fs.appendFile(path + '\\data.txt', content, 'utf8', (err) => {
    if (err) throw err;
    console.log('已存檔!');
});


※讀檔


※準備一個檔案,內容如下:
1, 2, 3, 4, 5 
a, b, c, d, e 
0, 9, 8, 7, 6 
z, y, x, w, v 


const fs = require('fs');
fs.readFile('D:\\123\\data.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
});

※很簡單就將內容全部都讀出來了,但如果只想一次讀一行要看下面的Readline



※Readline

官網連結


const readline = require('readline');
const fs = require('fs');
    
const rl = readline.createInterface({
    input: fs.createReadStream('D:\\123\\data.txt')
});
    
rl.on('line', (xxx) => {
    console.log(xxx);
    var split = xxx.trim().split(',');
    for(l in split){
        console.log(l.trim());
        // split.forEach(ooo);
    }
});
    
function ooo(value, index, ar){
    console.log(value.trim());// 值
    console.log(index);// 就是index
    console.log(ar); // 整個陣列
}

※on裡面的字,一定要叫line

※Callback已經是迴圈了,直接將抓到的值做處理


沒有留言:

張貼留言