學習要點:
Node.js 文件系統
同步和異步
同步代碼從上到下履行,異步不受空間控制
案例:file.js
var fs = require('fs');
// 異步讀取
fs.readFile('input.txt', function (err, data) {
if (err) return console.log(err);
console.log('異步讀?。? + data.toString());
})
// 同步讀取
var data = fs.readFileSync('input.txt');
console.log('同步讀?。? + data.toString());
console.log('程序履行終了。');
打開文件
fs.open(path, flags[, mode], callback)
參數使用說明以下:
path - 文件的路徑。
flags - 文件打開的行動。
mode - 設置文件模式(權限),文件創建默許權限為 0666(可讀,可寫)。
callback - 回調函數,帶有兩個參數如:callback(err, fd)。
案例:open.js
var fs = require('fs');
// 異步打開文件
console.log('準備打開文件');
// 讀寫方式打開inptu.txt
fs.open('input.txt', 'r+', function (err, fd) {
if (err) return console.log(err);
console.log('文件打開成功');
});
console.log('程序履行終了');
獲得文件信息
fs.start(path, callback)
參數使用說明以下:
path - 文件路徑。
callback - 回調函數,帶有兩個參數如:(err, stats), stats 是 fs.Stats 對象
案例:info.js
var fs = require('fs');
console.log('準備打開文件');
fs.stat('input.txt', function (err, stats) {
if (err) return console.error(err);
console.log(stats);
console.log('讀取文件信息成功');
// 檢測文件類型
console.log('是不是為文件(isFile) ? ' + stats.isFile());
console.log('是不是為目錄(isDirectory) ? ' + stats.isDirectory());
})
寫入文件
fs.writeFile(filename, data[, options], callback)
如果文件存在,寫入的內容會覆蓋舊文件內容
參數使用說明以下:
path - 文件路徑。
data - 要寫入文件的數據,可以是 String(字符串) 或 Buffer(流) 對象。
options - 該參數是1個對象,包括 {encoding, mode, flag}。默許編碼為 utf8, 模式為 0666 , flag 為 'w'
callback - 回調函數,回調函數只包括毛病信息參數(err),在寫入失敗時返回。
案例: write.js
var fs = require('fs');
console.log('準備寫入文件');
fs.writeFile('input.txt', '我是新寫入的內容', function (err) {
if (err) console.error(err);
console.log('數據寫入的數據');
console.log('-------------------');
});
console.log('讀取寫入的數據');
fs.readFile('input.txt', function (err, data) {
if (err) console.error(err);
console.log('異步讀取文件數據:' + data.toString());
})
讀入文件
fs.writeFile(filename, data[, options], callback)
如果文件存在,該方法寫入的內容會覆蓋舊的文件內容。
參數使用說明以下:
path - 文件路徑。
data - 要寫入文件的數據,可以是 String(字符串) 或 Buffer(流) 對象。
options - 該參數是1個對象,包括 {encoding, mode, flag}。默許編碼為 utf8, 模式為 0666 , flag 為 'w'
callback - 回調函數,回調函數只包括毛病信息參數(err),在寫入失敗時返回
案例:read.js
var fs = require('fs');
var buf = new Buffer(1024);
fs.open('input.txt', 'r+', function (err, fd) {
if (err) return console.error(err);
console.log('文件打開成功');
console.log('準備讀取文件');
// fd fs.open的標識
// buf 緩存區
// 0, buf.length 緩存區區間
// 0, 讀取input.txt開始位置
fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {
if (err) console.log(err);
console.log(bytes + ' 字節被讀取');
if (bytes > 0) {
console.log(buf.slice(0, bytes).toString());
}
})
})
關閉文件
fs.close(fd, callback)
參數使用說明以下:
fd - 通過 fs.open() 方法返回的文件描寫符。
callback - 回調函數,沒有參數。
案例:close.js
var fs = require('fs');
var buf = new Buffer(1024);
fs.open('input.txt', 'r+', function (err, fd) {
if (err) return console.error(err);
console.log('文件打開成功');
console.log('準備讀取文件');
// fd fs.open的標識
// buf 緩存區
// 0, buf.length 緩存區區間
// 0, 讀取input.txt開始位置
fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {
if (err) console.log(err);
console.log(bytes + ' 字節被讀取');
if (bytes > 0) {
console.log(buf.slice(0, bytes).toString());
}
})
// 關閉文件
fs.close(fd, function (err){
if (err) console.error(err);
console.log('文件關閉成功');
});
})
截取文件
fs.ftruncate(fd, len, callback)
該方法使用了文件描寫符來讀取文件
參數
fd - 通過 fs.open() 方法返回的文件描寫符。
len - 文件內容截取的長度。
callback - 回調函數,沒有參數
。
案例:ftruncate.js
var fs = require('fs');
var buf = new Buffer(1024);
console.log('準備打開文件');
fs.open('input.txt', 'r+', function (err, fd) {
if (err) return console.error(err);
console.log('文件打開成功');
console.log('截取10字節后的文件內容');
// 截取文件
fs.ftruncate(fd, 10, function (err) {
if (err) console.log(err);
console.log('文件截取成功');
console.log('讀取相同的文件');
fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {
if (err) console.error(err);
// 僅僅輸出讀取的字節
if (bytes > 0) {
console.log(buf.slice(0, bytes).toString());
}
// 關閉文件
fs.close(fd, function (err) {
if (err) console.error(err);
console.log('文件關閉成功');
})
})
})
})
刪除文件
fs.unlink(path, callback)
參數
path - 文件路徑
callback - 回調函數,無參
案例:unlink.js
var fs = require('fs');
console.log('準備刪除文件');
fs.unlink('input.txt', function (err) {
if (err) return console.log(err);
console.log('文件刪除成功');
})
創建目錄
fs.mkdir(path[, mode], callback)
參數
path - 文件路徑
mode - 設置目錄權限,默許為0777
callback - 回調函數
案例:mkdir.js
var fs = require('fs');
console.log('創建目錄 test');
fs.mkdir('test', function (err) {
if (err) return console.error(err);
console.log('目錄創建成功');
});
查看目錄
fs.readdir(path, callback)
參數使用說明以下:
path - 文件路徑。
callback - 回調函數,回調函數帶有兩個參數err, files,err 為毛病信息,files 為 目錄下的文件數組列表
案例:readdir.js
var fs = require('fs');
console.log('查看 /file 目錄');
fs.readdir('../file/', function (err, files) {
if (err) return console.log(err);
files.forEach(function (file) {
console.log(file);
})
})
刪除目錄
fs.rmdir(path, callback)
參數使用說明以下:
path - 文件路徑。
callback - 回調函數,沒有參數。
案例: rmdir.js
var fs = require('fs');
console.log('刪除 /test 目錄');
fs.rmdir('test', function (err){
if (err) console.error(err);
console.log('讀取 /test 目錄');
fs.readdir('test', function (err, files) {
if (err) return console.log(err);
files.forEach(function (file) {
console.log(file);
})
})
});
下一篇 Qt之QPushButton