1. 程式人生 > 實用技巧 >Deno檔案處理詳解:如何寫入檔案、如何讀檔案、如何建立刪除以及檢查檔案和目錄。

Deno檔案處理詳解:如何寫入檔案、如何讀檔案、如何建立刪除以及檢查檔案和目錄。

原文地址:Deno檔案處理詳解:如何寫入檔案、如何讀檔案、如何建立刪除以及檢查文...

Deno帶有自己的檔案系統作為核心模組。該檔案系統模組可用於任何型別的檔案或目錄操作。在本教程分享了在Deno應用程式中檔案處理的方法示例:如何寫入檔案、如何讀檔案、如何建立刪除以及檢查檔案和目錄。

目前,一些方法仍處於試驗階段,並且非常不穩定。使用這些方法時,應始終新增標誌。--unstable

我們將向您介紹以下內容:

  • 如何在Deno中寫入檔案
  • 如何在Deno中讀取檔案
  • 刪除Deno(removeremoveSync)中的檔案
  • 檢查目錄中的資料夾(ensureDir)
  • 複製檔案內容(copy)
  • 檢查目錄(exists
    )
  • 檢查檔案是否存在(ensureFile)
  • 如何在Deno(emptyDir)中清空目錄
  • 在Deno中建立CLI應用程式

如何在Deno中寫入檔案

有幾種方法可以在Deno中寫入檔案。它們都需要標誌,並且如果發生則將引發錯誤。--allow-write

您可以使用或將文字寫入檔案。具有同步和非同步格式,並帶有兩個引數:檔案的位置和下面要寫入檔案的內容。Deno.writeTextFileDeno.writeFileDeno.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中移除或者說刪除檔案(removeandremoveSync)

想要在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.txttest.txtoverwrite

檢查目錄(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時需要考慮多種方法和方案。知道如何使用同步和非同步方法總是有好處的,因為它們都有用例。寫入較大的檔案時,應考慮使用分片寫入功能。