原文地址:Deno文件處理詳解:如何寫入文件、如何讀文件、如何創建刪除以及檢查文...
Deno帶有自己的文件系統作為核心模塊。該文件系統模塊可用於任何類型的文件或目錄操作。在本教程分享了在Deno應用程序中文件處理的方法示例:如何寫入文件、如何讀文件、如何創建刪除以及檢查文件和目錄。
目前,一些方法仍處於試驗階段,並且非常不穩定。使用這些方法時,應始終添加標志。--unstable
我們將向您介紹以下內容:
- 如何在Deno中寫入文件
- 如何在Deno中讀取文件
- 刪除Deno(
remove
和removeSync
)中的文件 - 檢查目錄中的文件夾(
ensureDir
) - 復制文件內容(
copy
) - 檢查目錄(
exists
) - 檢查文件是否存在(
ensureFile
) - 如何在Deno(
emptyDir
)中清空目錄 - 在Deno中創建CLI應用程序
如何在Deno中寫入文件
有幾種方法可以在Deno中寫入文件。它們都需要標志,並且如果發生則將引發錯誤。--allow-write
您可以使用或將文本寫入文件。具有同步和異步格式,並帶有兩個參數:文件的位置和下面要寫入文件的內容。Deno.writeTextFile
Deno.writeFile
Deno.writeTextFile
// using the async method
await Deno.writeTextFile('./file.txt', 'This is the content to be written');
//using sync method
Deno.writeTextFileSync('./file.txt', 'This is the content to be written');
你也可以使用帶有TextEncoder的Deno.writeFile方法,TextEncoder方法可以轉換字符串為Unit8Array:
const encoder = new TextEncoder(); // to convert a string to Uint8Array
await Deno.writeFile("./file.txt", encoder.encode("Content to be written"));
最后,你可以說好用Deno.open和Deno.writeAll方法打開一個文件,寫入內容,然后關閉文件。
const file = await Deno.open("./image.png", { write: true, create: true }); //this opens the file
await Deno.writeAll(file, imageBytes); //writes to file
file.close(); // closes the file
如果你想寫入內容到一個不存在文件,Deno會自動創建這個文件。
Deno如何讀文件
像寫文件一樣,Deno有多種讀文件方法,並且這些每一個方法都需要--allow-read參數。
你可以使用Deno.readTextFile和Deno.readFile方法去讀一個文件。Deno.readTextFile提供同步和異步方法,並且將路徑做為參數:
// using the async method
const text = await Deno.readTextFile("file.txt");
console.log(text);
//using the sync method
const sync = Deno.readTextFileSync("file.txt");
console.log(sync);
另一個方法是Deno.readFile。你必須首先使用TextDecoder方法將文件解碼到一個可讀的格式。
const decoder = new TextDecoder("utf-8");
const text = decoder.decode(await Deno.readFile("file.txt"));
console.log(text);
在Deno中移除或者說刪除文件(remove
and removeSync
)
想要在Deno刪除文件,使用remove和removeSync方法。
// Deno remove file asynchronous (non-block)
await Deno.remove("file.txt");
// Deno remove file synchronous (blocking way)
Deno.removeSync("image.png");
如果嘗試刪除不存在的文件,則Deno會引發錯誤。
Uncaught NotFound: No such file or directory (os error 2)
檢查目錄中的文件夾(ensureDir
)
該ensureDir
方法可確保您的工作目錄中存在一個文件夾。您可以使用它來編寫一個簡單的程序。
讓我們編寫一個簡單的程序來檢查文件夾是否存在。如果該文件夾存在,它將創建一個新文件並向其中添加一些文本內容。
要使用此方法,必須將其導入到應用程序中。notes
在工作目錄中創建一個文件夾。這是您存儲筆記的地方。
import { ensureDir, ensureDirSync } from "https://deno.land/std/fs/mod.ts";
與到目前為止我們討論過的其他方法一樣,該方法有異步和同步格式。這是使用異步方法的方法:
ensureDir("./notes")
.then(() => Deno.writeTextFile("./notes/note1.txt", "This is the content for note 1"));
復制文件內容(copy
)
該copy
方法使您可以將文件內容復制到另一個文件。
要將copy
方法導入到Deno應用程序中:
import { copy } from "https://deno.land/std/fs/mod.ts";
copy("file.txt", "test.txt", {
overwrite: true,
});
此方法將文件內容從復制到。它還需要一些選擇。例如,該選項將覆蓋您要將內容復制到的文件的內容。file.txt
test.txt
overwrite
檢查目錄(exists
)
該exists
方法檢查目錄是否存在。exists
返回一個Promise而existsSync
返回一個布爾值。
讓我們編寫一個簡單的程序,該程序將檢查目錄是否存在:
import { exists, existsSync } from "https://deno.land/std/fs/mod.ts";
exists("./notes").then((res) => console.log(res)); //res here returns a boolean
//or do this
let fileExists = existsSync("./notes");
console.log(fileExists);// returns boolean
檢查文件是否存在(ensureFile
)
ensureFile
確保文件存在。
讓我們編寫一個簡單的程序進行試驗:
import { ensureFile, ensureFileSync } from "https://deno.land/std/fs/mod.ts";
let ok = ensureFileSync("./read.ts");
如果該文件不存在,Deno會自動創建它。同樣,請記住添加——不穩定標志,因為其中一些方法仍處於試驗階段。
如何在Deno(emptyDir
)中清空目錄
該emptyDir
方法檢查目錄是否為空。如果指定的目錄包含任何文件或目錄,則Deno清空該目錄。
import { emptyDir } from "https://deno.land/std/fs/mod.ts";
emptyDir("./notes").then((res) => console.log("res", res)); // this method return a promise.
使用Deno創建一個CLI應用
現在讓我們創建一個簡單的CLI應用程序,它將為我們創建文件。我們將使用終端來創建這個文件。
Deno.args返回在命令中傳遞的所有參數。這樣,我們就可以創建一個簡單的應用程序。我們的命令將保存我們想要創建的文件的名稱。
運行以下:
deno run main.ts create-file test.ts.
這個命令有兩個參數:create-file和test.ts。如果我們記錄Deno.args,它將返回一個數組中的參數。
我們可以使用它來檢查用戶是否傳遞了創建文件參數並為文件提供了一個名稱:
let params = Deno.args;
console.log(params);
let createFile = () => {
if (params[0] !== "create-file") {
console.log(
`${params[0]} is not a valid command, Did you mean 'create-file'`,
);
return false;
} else if (!params[1]) {
console.log(
`You need to provide a name of a file`,
);
return false;
} else {
Deno.writeTextFileSync(`./${params[1]}`, "//This is your created file");
}
};
createFile();
現在運行應用程序,打開你的終端,運行以下程序:
deno run --allow-all main.ts create-file <name of file>
記住添加 --allow-all
或者 --allow-write
文件參數
總結
如Deno的文件系統非常通用,將文件寫入Deno時需要考慮多種方法和方案。知道如何使用同步和異步方法總是有好處的,因為它們都有用例。寫入較大的文件時,應考慮使用分片寫入功能。