Deno ファイルに書き込みを行う

Deno ファイルに書き込みを行う

Denoで、ファイルに書き込みを行うサンプルコードを記述してます。Denoはnode.jsの反省点をふまえた新しいJavaScriptランタイムです。

環境

  • OS windows10 64bit
  • Deno 1.6.1
  • typescript 4.1.2

ファイル書き込み

Deno FileSystemを使用することで、ファイルに書き込みを行うことが可能です。

サンプルコード(sample.ts)

//テキストエンコードを作成
const encoder = new TextEncoder();

// 書き込むファイルを指定
const data = encoder.encode("hoge\nhoge");

// 上書きで書き込み なければ作成
await Deno.writeFile("./hoge1.txt", data);

// パーミッションを設定
await Deno.writeFile("./hoge2.txt", data, {mode: 0o777});  

// 追加書き込み
await Deno.writeFile("./hoge3.txt", data, {append: true}); 

// ファイルが存在しなければ実行しない
await Deno.writeFile("./hoge4.txt", data, {create: false});

実行すると、ファイルに書き込みが行われていることが確認できます。

deno run --allow-write sample.ts

<出力結果>
error: Uncaught (in promise) PermissionDenied: read access to "./hoge4.txt", run again with the --allow-read flag
    at processResponse (deno:core/core.js:223:11)
    at Object.jsonOpAsync (deno:core/core.js:240:12)
    at async stat (deno:runtime/rt/30_fs.js:224:17)
    at async Object.writeFile (deno:runtime/rt/40_write_file.js:47:9)

hoge1.txt

hoge2.txt

hoge3.txt(2回実行) 追加書き込みされていることが確認できます。

hoge4.txtは存在しないので、エラーとなります。

また、許可の要求なしにファイルへの書き込みを実行すると、Denoはデフォルトでファイルへのアクセスが制限されているので「PermissionDenied」が発生します。

deno run sample.ts

<出力結果>
error: Uncaught (in promise) PermissionDenied: write access to "./hoge1.txt", run again with the --allow-write flag
    at processResponse (deno:core/core.js:223:11)
    at Object.jsonOpAsync (deno:core/core.js:240:12)
    at async open (deno:runtime/rt/30_files.js:44:17)
    at async Object.writeFile (deno:runtime/rt/40_write_file.js:54:18)