UNPKG

lib-utils-ts

Version:

<img src="https://img.shields.io/npm/v/lib-utils-ts"/> <img src="https://img.shields.io/snyk/vulnerabilities/npm/lib-utils-ts"/> <img src="https://img.shields.io/npm/l/lib-utils-ts"/> <img src="https://img.shields.io/github/languages/top/devGnode/lib-util

64 lines (54 loc) 2.12 kB
import {OutputStream} from "./OutputStream"; import {File} from "./File"; import {FileNotFoundException} from "./FileNotFoundException"; import * as fs from "fs"; import {IOException, NullPointerException} from "../Exception"; import {BYTE} from "../primitives/Globals"; import {FileDescriptor} from "./FileDescriptor"; /*** * */ export class FileOutputStream extends OutputStream{ private readonly path:string; private readonly fd:FileDescriptor; constructor(file:string|File|FileDescriptor, truncate?:boolean ) { super(); if(file===null||file===undefined) throw new NullPointerException(); if(typeof file ==="string") file = new File(file); if(file instanceof FileDescriptor){ this.path = null; this.fd = file; }else { if (!file.exists()) { if (!file.createNewFile()) throw new IOException(`Impossible to create file '${file.getName()}' in target '${file.getParent()}'`); } if (!file.isFile()) throw new FileNotFoundException(`Invalid file path, '${file.toString()}' doesn't exists.`); this.path = file.toString(); this.fd = new FileDescriptor().set(fs.openSync(this.path, truncate === true ? "a" : "w")); } } public write(b:number|BYTE|string): void { try {fs.writeSync(this.fd.get(), b === "string" ? b.toString() : typeof b === "number" ? String.fromCharCode(b) : b.toString());}catch (e) { throw new IOException(e.stack) } } public writeBytes(buffer: string[], off: number = 0, length: number): void { super.writeBytes(buffer, off, length); } public close() { // flush if(this.fd.get()===1||this.fd.get()===2) void 0; else{ // close fd this.fd.close(); } } public getFD():FileDescriptor{ if(!this.fd) return null; if(this.fd.isValid())return this.fd; throw new IOException(); } public flush() {fs.ftruncateSync(this.fd.get(),0);} } Object.package(this);