檢查文件是否存在,查詢文件信息
- fs.stat()
fs.stat('./server.js', function (err, stat) {
if (stat && stat.isFile()) {
console.log('文件存在');
} else {
console.log('文件不存在或不是標准文件');
}
console.log(stat)
});
-
[x] 判斷文件是否存在
-
[x] 不能判斷目錄
-
[x] 查詢文件信息
-
[x] 打印結果:
文件存在
Stats {
dev: 2052,
mode: 33279,
nlink: 1,
uid: 1000,
gid: 1000,
rdev: 0,
blksize: 4096,
ino: 515557,
size: 10,
blocks: 1,
atimeMs: 1536141106630.312,
mtimeMs: 1536141106580.8394,
ctimeMs: 1536141106580.8394,
birthtimeMs: 1536141106580.8394,
atime: 2018-09-05T09:51:46.630Z,
mtime: 2018-09-05T09:51:46.581Z,
ctime: 2018-09-05T09:51:46.581Z,
birthtime: 2018-09-05T09:51:46.581Z }
- fs.access()
fs.access('/server.js', function(err) {
console.log(err ? '文件存在' : '文件不存在');
});
判斷文件是否存在
fs.access('./server.js', fs.R_OK | fs.W_OK, function(err) {
console.log(err ? '不可操作!' : '可以讀/寫');
});
fs.access()用於檢查到指定path路徑的目錄或文件的訪問權限。其回調函數中有一個參數(err),如果檢查失敗則會出現錯誤參數的響應。mode是要檢查的權限掩碼,它可以是以下枚舉值之一:
- fs.F_OK - 文件是對於進程是否可見,可以用來檢查文件是否存在。也是mode 的默認值
- fs.R_OK - 文件對於進程是否可讀
- fs.W_OK - 文件對於進程是否可寫
- fs.X_OK - 文件對於進程是否可執行。(Windows系統不可用,執行效果等同fs.F_OK)
打開文件
fs.open('./server.js','r',function(err,fd){
// 在這里通過文件描述fs對文件進行操作
})
fs.open()方法第一個參數是文件路徑。每二個參數是標志位,標志位表示文件的打開模式。標志含義與UNIX中fopen的標識位相同:
- r 打開文本文件進行讀取,數據流位置在文件起始處
- r+ 打開文本文件進行讀寫,數據流位置在文件起始處
- w 如果文件存在,將其清零,不存在創建寫入文件。數據流位置在文件起始處
- w+ 打開文件進行讀寫,如果文件存在,將其清零,不存在創建寫入文件。數據流位置在文件起始處
- a 打開文件寫入數據,如果文件存在,將其清零,不存在創建寫入文件。數據流位置在文件結尾處,此后的寫操作都將數據追加到文件后面
- a+ 打開文件進行文件讀寫,如果文件存在,將其清零,不存在創建寫入文件。數據流位置在文件結尾處,此后的寫操作都將數據追加到文件后面
關閉文件
fs.open('./server.js', 'a', function (err, fd) {
//對文件一些操作
//操作完成后,關閉文件
fs.close(fd, function(err){
})
})
文件目錄操作
當我們需要對目錄進行操作時,可以用node的fs模塊提供的目錄操作相關方法:mkidr,readdir,rmdir
- 使用fs.mkdir創建目錄
fs.mkdir('./test/2',function(err){
if(err){
console.log(err)
}
})
目錄里多了一個test文件夾
2. 使用fs.readdir進行目錄讀取
fs.readdir('./test',function(err,files){
if (err) {
console.log(err)
}
console.log(files)
})
test目錄下有1和2兩個文件夾控制台輸出[ '1', '2' ]
3. 使用fs.rmdir進行目錄刪除
fs.rmdir('./test/2',function(err){
if(err){
console.log(err)
}
})
當目錄非空、路徑錯誤、非目錄時異常會發生,此時文件夾被刪除了
文件目錄的重命名,和文件的刪除
- 使用fs.rename對文件或者目錄進行重命名
fs.rename('./test','./test1',function(err){
if(err) throw err;
console.log('目錄重命名完成')
})
將test重命名為test1
fs.rename('./test/1/test.js','./test/1/test1.js',function(err){
if(err) throw err;
console.log('文件重命名完成')
})
- 使用fs.unlink刪除文件
fs.unlink('./test/1/test1.js', function(err) {
if (err) throw err;
console.log('文件刪除成功');
});
刪除了test1.js文件
文件的讀寫
node提供read,write,readFile,createReadStream, writeFile, createWriteStream來對文件進行讀寫
使用fs.writeFile()方法向./text.txt文件寫入內容:
fs.writeFile('./test.txt', '測試', function(err){
if(err){
console.log(err);
}
})
使用fs.readFile()方法讀./text.txt文件全部內容:
fs.readFile('./test.txt', function(err, data){
//文件內容
console.log(data.toString());
})
打印結果為'測試'
fs模塊提供了創建文件可讀流與創建文件可寫讀的方法:fs.createReadStream()和fs. createWriteStream(),這兩個方法分別分返回一個Readable Stream對象和Writable Stream對象。通過這兩個對象,我們可以基於流的文件處理,在讀寫大文件及基於流的轉接、暫停、讀取等操作方面有很大的作用。
let readStream = fs.createReadStream('./test.txt') // 創建可讀流
let writeStream = fs.createWriteStream('./server.js') // 創建可寫流
readStream.on('data', function(data){
writeStream.write(data)
})
讀取text.txt的內容,將其寫入到server.js中,會覆蓋server.js原有內容