Deno 是一个现代的 JavaScript 和 TypeScript 运行时,它提供了许多内置功能来简化 Web 开发任务。文件系统访问是其中一项重要功能,允许开发者与本地文件进行交互,如读取、写入和删除文件等。
文件读取
Deno 提供了多种方法来读取文件的内容。最常用的方法之一是使用 Deno.readTextFile()
函数,该函数用于从文件中读取文本内容,并返回一个字符串。下面是一个简单的示例:
const text = await Deno.readTextFile("path/to/your/file.txt"); console.log(text);
如果需要读取二进制数据,则可以使用 Deno.readFile()
函数,该函数会返回一个 Uint8Array
对象:
const binaryData = await Deno.readFile("path/to/your/file.bin"); console.log(binaryData);
此外,还可以通过 Deno.open()
方法打开一个文件,并使用 read()
函数逐个读取文件中的内容:
const file = await Deno.open("path/to/your/file.txt"); for await (const chunk of file) { const text = new TextDecoder().decode(chunk); console.log(text); } file.close();
文件写入
Deno 提供了两种主要的方式来写入文件:Deno.writeTextFile()
和 Deno.writeFile()
。
Deno.writeTextFile()
函数用于将文本写入文件,如果文件不存在则会创建文件;如果文件已存在,则会覆盖原有内容:
await Deno.writeTextFile("path/to/your/file.txt", "Hello, Deno!");
Deno.writeFile()
函数用于将二进制数据写入文件。同样地,如果文件不存在则会创建文件;如果文件已存在,则会覆盖原有内容:
const data = new TextEncoder().encode("Hello, Deno!"); await Deno.writeFile("path/to/your/file.bin", data);
如果需要向现有文件追加内容而不是覆盖原有内容,可以使用 Deno.open()
方法并指定 append: true
参数:
const file = await Deno.open("path/to/your/file.txt", { append: true }); await Deno.writeAll(file, new TextEncoder().encode("\nHello, again!")); file.close();
目录操作
Deno 提供了多种方法来操作目录,包括创建、删除和列出目录内容。
创建目录
使用 Deno.mkdir()
函数可以创建新的目录。例如:
await Deno.mkdir("path/to/new/directory");
如果需要递归创建多级目录,可以传递 recursive: true
参数:
await Deno.mkdir("path/to/new/directory", { recursive: true });
删除目录
删除目录可以使用 Deno.remove()
函数。如果目录为空,可以直接删除:
await Deno.remove("path/to/existing/directory");
如果需要删除非空目录,可以传递 recursive: true
参数:
await Deno.remove("path/to/existing/directory", { recursive: true });
列出目录内容
使用 Deno.readDir()
函数可以列出指定目录下的所有内容,包括文件和子目录:
for await (const entry of Deno.readDir("path/to/directory")) { console.log(entry.name); }
上述代码会输出目录中的每个条目的名称。entry
对象还包含了其他属性,如 isFile
和 isDirectory
,可以用来判断条目类型。
文件和目录权限
Deno 的文件系统 API 默认是安全的,不允许访问除当前工作目录外的其他文件或目录。要改变这种行为,需要显式地传递权限标志。
请求权限
使用 --allow-read
、--allow-write
和 --allow-run
等命令行标志来请求特定类型的权限。例如:
deno run --allow-read=/home/user --allow-write=/tmp your-script.ts
这将允许脚本读取 /home/user
目录下的文件以及写入 /tmp
目录。
动态请求权限
在运行时也可以动态请求权限,使用 Deno.permissions.request()
方法。例如:
const permission = await Deno.permissions.request({ name: "read", path: "/path/to/file" }); if (permission.state === "granted") { console.log("Permission granted."); } else { console.log("Permission denied."); }
这个例子展示了如何请求读取特定路径的权限,并根据结果采取相应的行动。
通过这些基本的操作,你可以利用 Deno 强大的文件系统 API 来处理各种文件相关的任务。无论是简单的文件读写还是复杂的目录管理,Deno 都能提供简单而强大的支持。