Bun 是一个功能强大的 JavaScript 运行时,它提供了许多内置的工具和库来简化开发工作。其中,文件操作是前端开发中常见的需求之一。在本章中,我们将详细介绍如何使用 Bun 来进行文件操作,包括读取、写入、删除文件等。
文件读取
使用 fs.readFile 读取文件
Bun 提供了一个类似于 Node.js 的 fs 模块,可以用来读取文件。下面是一个简单的例子:
// www.javascriptcn.com code example
import { fileURLToPath } from 'https://deno.land/std@0.168.0/node/url.ts';
import { readFile } from 'https://deno.land/std@0.168.0/node/fs.ts';
const __filename = fileURLToPath(import.meta.url);
const filePath = new URL('../data/sample.txt', import.meta.url).pathname;
readFile(filePath, 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});使用 fs.readFileSync 同步读取文件
如果你更喜欢同步操作,可以使用 readFileSync 方法:
// www.javascriptcn.com code example
import { fileURLToPath } from 'https://deno.land/std@0.168.0/node/url.ts';
import { readFileSync } from 'https://deno.land/std@0.168.0/node/fs.ts';
const __filename = fileURLToPath(import.meta.url);
const filePath = new URL('../data/sample.txt', import.meta.url).pathname;
try {
const data = readFileSync(filePath, 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}文件写入
使用 fs.writeFile 写入文件
fs.writeFile 可以用来异步写入文件:
// www.javascriptcn.com code example
import { fileURLToPath } from 'https://deno.land/std@0.168.0/node/url.ts';
import { writeFile } from 'https://deno.land/std@0.168.0/node/fs.ts';
const __filename = fileURLToPath(import.meta.url);
const filePath = new URL('../data/output.txt', import.meta.url).pathname;
writeFile(filePath, 'Hello, world!', 'utf8', (err) => {
if (err) throw err;
console.log('文件已成功写入');
});使用 fs.writeFileSync 同步写入文件
同样地,你可以使用 writeFileSync 方法来进行同步写入:
// www.javascriptcn.com code example
import { fileURLToPath } from 'https://deno.land/std@0.168.0/node/url.ts';
import { writeFileSync } from 'https://deno.land/std@0.168.0/node/fs.ts';
const __filename = fileURLToPath(import.meta.url);
const filePath = new URL('../data/output.txt', import.meta.url).pathname;
try {
writeFileSync(filePath, 'Hello, world!', 'utf8');
console.log('文件已成功写入');
} catch (err) {
console.error(err);
}文件删除
使用 fs.unlink 删除文件
fs.unlink 可以用来删除指定路径的文件:
// www.javascriptcn.com code example
import { fileURLToPath } from 'https://deno.land/std@0.168.0/node/url.ts';
import { unlink } from 'https://deno.land/std@0.168.0/node/fs.ts';
const __filename = fileURLToPath(import.meta.url);
const filePath = new URL('../data/output.txt', import.meta.url).pathname;
unlink(filePath, (err) => {
if (err) throw err;
console.log('文件已成功删除');
});使用 fs.unlinkSync 同步删除文件
对于同步操作,你可以使用 unlinkSync 方法:
// www.javascriptcn.com code example
import { fileURLToPath } from 'https://deno.land/std@0.168.0/node/url.ts';
import { unlinkSync } from 'https://deno.land/std@0.168.0/node/fs.ts';
const __filename = fileURLToPath(import.meta.url);
const filePath = new URL('../data/output.txt', import.meta.url).pathname;
try {
unlinkSync(filePath);
console.log('文件已成功删除');
} catch (err) {
console.error(err);
}文件夹操作
创建文件夹
使用 fs.mkdir 创建文件夹:
import { mkdir } from 'https://deno.land/std@0.168.0/node/fs.ts';
mkdir('../data/newfolder', { recursive: true }, (err) => {
if (err) throw err;
console.log('文件夹已成功创建');
});删除文件夹
使用 fs.rmdir 删除空文件夹:
import { rmdir } from 'https://deno.land/std@0.168.0/node/fs.ts';
rmdir('../data/newfolder', (err) => {
if (err) throw err;
console.log('文件夹已成功删除');
});如果需要递归删除文件夹及其内容,可以使用 fs.rm 方法:
import { rm } from 'https://deno.land/std@0.168.0/node/fs.ts';
rm('../data/newfolder', { recursive: true, force: true }, (err) => {
if (err) throw err;
console.log('文件夹已成功删除');
});文件遍历
遍历文件夹中的所有文件
你可以使用 fs.readdir 方法来遍历文件夹中的所有文件:
import { readdir } from 'https://deno.land/std@0.168.0/node/fs.ts';
readdir('../data', (err, files) => {
if (err) throw err;
for (const file of files) {
console.log(file);
}
});递归遍历文件夹
为了递归遍历文件夹中的所有文件和子文件夹,可以使用一个递归函数:
// www.javascriptcn.com code example
import { readdir, stat } from 'https://deno.land/std@0.168.0/node/fs.ts';
function traverseDirectory(path) {
readdir(path, (err, files) => {
if (err) throw err;
for (const file of files) {
const fullPath = path + '/' + file;
stat(fullPath, (err, stats) => {
if (err) throw err;
if (stats.isDirectory()) {
traverseDirectory(fullPath);
} else {
console.log(fullPath);
}
});
}
});
}
traverseDirectory('../data');通过以上这些方法,你可以灵活地使用 Bun 来进行各种文件操作,提高开发效率。希望这些示例对你有所帮助!