读取和写入文件
概念
- Deno 的运行时 API 提供了 Deno.readTextFile 和 Deno.writeTextFile 异步函数,用于读取和写入整个文本文件。
- 与 Deno 的许多 API 一样,同步替代方案也可用。请参阅 Deno.readTextFileSync 和 Deno.writeTextFileSync。
- 使用
--allow-read
和--allow-write
权限来访问文件系统。
概述
与文件系统交互以读取和写入文件是一个常见的要求。Deno 通过 标准库 和 Deno 运行时 API 提供了许多方法来实现这一点。
如获取数据示例中所述,出于安全原因,Deno 默认限制对输入/输出的访问。因此,在与文件系统交互时,必须将--allow-read
和--allow-write
标志与deno run
命令一起使用。
读取文本文件
Deno 运行时 API 使得可以通过Deno.readTextFile()
方法读取文本文件,该方法需要路径字符串或 URL 对象。该方法返回一个 promise,它提供对文件文本数据的访问。
命令:deno run --allow-read read.ts
/**
* read.ts
*/
const text = await Deno.readTextFile("./people.json");
console.log(text);
/**
* Output:
*
* [
* {"id": 1, "name": "John", "age": 23},
* {"id": 2, "name": "Sandra", "age": 51},
* {"id": 5, "name": "Devika", "age": 11}
* ]
*/
写入文本文件
Deno 运行时 API 允许开发人员通过Deno.writeTextFile()
方法将文本写入文件,该方法需要文件路径和文本字符串。该方法返回一个 promise,当文件成功写入时解析。
要运行该命令,必须向deno run
命令提供--allow-write
标志。
命令:deno run --allow-write write.ts
/**
* write.ts
*/
await Deno.writeTextFile("./hello.txt", "Hello World!");
console.log("File written to ./hello.txt");
/**
* Output: File written to ./hello.txt
*/
您可以像这样追加文本到文件
await Deno.writeTextFile("./hello.txt", "This text will be appended.", {
append: true,
});
通过组合Deno.writeTextFile
和JSON.stringify
,您可以将序列化 JSON 对象写入文件。此示例使用同步Deno.writeTextFileSync
,但这也可以使用await Deno.writeTextFile
异步完成。
要执行代码,deno run
命令需要写入标志。
命令:deno run --allow-write write.ts
/**
* write.ts
*/
function writeJson(path: string, data: object): string {
try {
Deno.writeTextFileSync(path, JSON.stringify(data));
return "Written to " + path;
} catch (e) {
return e.message;
}
}
console.log(writeJson("./data.json", { hello: "World" }));
/**
* Output: Written to ./data.json
*/