Deno.FsFile
Абстракция Deno для чтения и записи файлов.
Это самый простой способ обработки файлов в Deno, и он рекомендуется вместо использования отдельных функций в пространстве имён Deno.
const file = await Deno.open("/foo/bar.txt", { read: true });
const fileInfo = await file.stat();
if (fileInfo.isFile) {
const buf = new Uint8Array(100);
const numberOfBytesRead = await file.read(buf); // 11 bytes
const text = new TextDecoder().decode(buf); // "hello world"
}
file.close();
class FsFile implements Reader, ReaderSync, Writer, WriterSync, Seeker, SeekerSync, Closer {}constructor(rid: number);readonly rid: number;close(): void;read(p: Uint8Array): Promise<number | null>;readSync(p: Uint8Array): number | null;stat(): Promise<FileInfo>;statSync(): FileInfo;truncate(len?: number): Promise<void>;truncateSync(len?: number): void;write(p: Uint8Array): Promise<number>;writeSync(p: Uint8Array): number;
Конструкторы
new FsFile(rid: number)
Конструктор, принимающий идентификатор ресурса. Как правило, FsFile не следует создавать напрямую. Вместо этого используйте Deno.open или Deno.openSync для создания нового экземпляра FsFile.
Свойства
readable: ReadableStream<Uint8Array>
Экземпляр ReadableStream, представляющий содержимое файла в виде байтов. Это упрощает взаимодействие с другими API, основанными на потоках веб-страниц.
const file = await Deno.open("my_file.txt", { read: true });
const decoder = new TextDecoder();
for await (const chunk of file.readable) {
console.log(decoder.decode(chunk));
}
file.close();
rid: number
Идентификатор ресурса, связанный с экземпляром файла. Идентификатор ресурса следует рассматривать как непрозрачную ссылку на ресурс.
writable: WritableStream<Uint8Array>
Экземпляр WritableStream для записи содержимого файла. Это упрощает взаимодействие с другими API, основанными на потоках веб-страниц.
const items = ["hello", "world"];
const file = await Deno.open("my_file.txt", { write: true });
const encoder = new TextEncoder();
const writer = file.writable.getWriter();
for (const item of items) {
await writer.write(encoder.encode(item));
}
file.close();
Методы
close(): void
Закрыть файл. Закрытие файла после завершения работы с ним важно для предотвращения утечки ресурсов.
const file = await Deno.open("my_file.txt");
// do work with "file" object
file.close();
read(p: Uint8Array): Promise<number | null>
Прочитать файл в буфер массива (p).
Возвращает количество прочитанных байтов во время операции или EOF (null) в случае отсутствия данных для чтения.
Возможна ситуация, когда чтение успешно возвращает 0 байтов. Это не означает EOF.
Не гарантируется, что весь буфер будет прочитан за один вызов.
// if "/foo/bar.txt" contains the text "hello world":
const file = await Deno.open("/foo/bar.txt");
const buf = new Uint8Array(100);
const numberOfBytesRead = await file.read(buf); // 11 bytes
const text = new TextDecoder().decode(buf); // "hello world"
file.close();
readSync(p: Uint8Array): number | null
Синхронно прочитать из файла в буфер массива (p).
Возвращает количество прочитанных байтов во время операции или EOF (null) в случае отсутствия данных для чтения.
Возможна ситуация, когда чтение успешно возвращает 0 байтов. Это не означает EOF.
Не гарантируется, что весь буфер будет прочитан за один вызов.
// if "/foo/bar.txt" contains the text "hello world":
const file = Deno.openSync("/foo/bar.txt");
const buf = new Uint8Array(100);
const numberOfBytesRead = file.readSync(buf); // 11 bytes
const text = new TextDecoder().decode(buf); // "hello world"
file.close();
seek(offset: number, whence: SeekMode): Promise<number>
Переместить указатель на заданную offset в режиме, заданном whence. Вызов возвращает новое положение в ресурсе (байты от начала).
// Given file pointing to file with "Hello world", which is 11 bytes long:
const file = await Deno.open(
"hello.txt",
{ read: true, write: true, truncate: true, create: true },
);
await file.write(new TextEncoder().encode("Hello world"));
// advance cursor 6 bytes
const cursorPosition = await file.seek(6, Deno.SeekMode.Start);
console.log(cursorPosition); // 6
const buf = new Uint8Array(100);
await file.read(buf);
console.log(new TextDecoder().decode(buf)); // "world"
file.close();
Режимы перемещения указателя работают следующим образом:
// Given file.rid pointing to file with "Hello world", which is 11 bytes long:
const file = await Deno.open(
"hello.txt",
{ read: true, write: true, truncate: true, create: true },
);
await file.write(new TextEncoder().encode("Hello world"));
// Seek 6 bytes from the start of the file
console.log(await file.seek(6, Deno.SeekMode.Start)); // "6"
// Seek 2 more bytes from the current position
console.log(await file.seek(2, Deno.SeekMode.Current)); // "8"
// Seek backwards 2 bytes from the end of the file
console.log(await file.seek(-2, Deno.SeekMode.End)); // "9" (e.g. 11-2)
seekSync(offset: number, whence: SeekMode): number
Синхронно переместить указатель на заданную offset в режиме, заданном whence. Возвращается новое положение в ресурсе (байты от начала).
const file = Deno.openSync(
"hello.txt",
{ read: true, write: true, truncate: true, create: true },
);
file.writeSync(new TextEncoder().encode("Hello world"));
// advance cursor 6 bytes
const cursorPosition = file.seekSync(6, Deno.SeekMode.Start);
console.log(cursorPosition); // 6
const buf = new Uint8Array(100);
file.readSync(buf);
console.log(new TextDecoder().decode(buf)); // "world"
file.close();
Режимы перемещения указателя работают следующим образом:
// Given file.rid pointing to file with "Hello world", which is 11 bytes long:
const file = Deno.openSync(
"hello.txt",
{ read: true, write: true, truncate: true, create: true },
);
file.writeSync(new TextEncoder().encode("Hello world"));
// Seek 6 bytes from the start of the file
console.log(file.seekSync(6, Deno.SeekMode.Start)); // "6"
// Seek 2 more bytes from the current position
console.log(file.seekSync(2, Deno.SeekMode.Current)); // "8"
// Seek backwards 2 bytes from the end of the file
console.log(file.seekSync(-2, Deno.SeekMode.End)); // "9" (e.g. 11-2)
file.close();
stat(): Promise<FileInfo>
Возвращает Deno.FileInfo для файла.
import { assert } from "https://deno.land/std/testing/asserts.ts";
const file = await Deno.open("hello.txt");
const fileInfo = await file.stat();
assert(fileInfo.isFile);
file.close();
statSync(): FileInfo
Синхронно возвращает Deno.FileInfo для файла.
import { assert } from "https://deno.land/std/testing/asserts.ts";
const file = Deno.openSync("hello.txt")
const fileInfo = file.statSync();
assert(fileInfo.isFile);
file.close();
truncate(len?: number): Promise<void>
Усекает (или расширяет) файл до указанной len. Если len не указано, всё содержимое файла усекается.
Усечение всего файла
const file = await Deno.open("my_file.txt", { write: true });
await file.truncate();
file.close();
Усечение части файла
// if "my_file.txt" contains the text "hello world":
const file = await Deno.open("my_file.txt", { write: true });
await file.truncate(7);
const buf = new Uint8Array(100);
await file.read(buf);
const text = new TextDecoder().decode(buf); // "hello w"
file.close();
truncateSync(len?: number): void
Синхронно усекает (или расширяет) файл до указанной len. Если len не указано, всё содержимое файла усекается.
Усечение всего файла
const file = Deno.openSync("my_file.txt", { write: true });
file.truncateSync();
file.close();
Усечение части файла
// if "my_file.txt" contains the text "hello world":
const file = Deno.openSync("my_file.txt", { write: true });
file.truncateSync(7);
const buf = new Uint8Array(100);
file.readSync(buf);
const text = new TextDecoder().decode(buf); // "hello w"
file.close();
write(p: Uint8Array): Promise<number>
Записать содержимое буфера массива (p) в файл.
Возвращает количество записанных байтов.
Не гарантируется, что весь буфер будет записан за один вызов.
const encoder = new TextEncoder();
const data = encoder.encode("Hello world");
const file = await Deno.open("/foo/bar.txt", { write: true });
const bytesWritten = await file.write(data); // 11
file.close();
writeSync(p: Uint8Array): number
Синхронно записать содержимое буфера массива (p) в файл.
Возвращает количество записанных байтов.
Не гарантируется, что весь буфер будет записан за один вызов.
const encoder = new TextEncoder();
const data = encoder.encode("Hello world");
const file = Deno.openSync("/foo/bar.txt", { write: true });
const bytesWritten = file.writeSync(data); // 11
file.close();
© 2018–2022 the Deno authors
https://doc.deno.land/deno/stable/~/Deno.FsFile