154 lines
3.5 KiB
TypeScript
154 lines
3.5 KiB
TypeScript
import '@ccms/nashorn'
|
|
|
|
/*global Java, base, module, exports, require, __FILE__*/
|
|
const Path = Java.type("java.nio.file.Path");
|
|
const JavaString = Java.type("java.lang.String");
|
|
const File = Java.type("java.io.File");
|
|
const Files = Java.type("java.nio.file.Files");
|
|
const Collector = Java.type("java.util.stream.Collector")
|
|
const separatorChar = File.separatorChar;
|
|
const StandardCopyOption = Java.type("java.nio.file.StandardCopyOption");
|
|
|
|
/**
|
|
* 用文件分割符合并路径
|
|
*/
|
|
export function concat(...args: string[]) {
|
|
return args.join(separatorChar);
|
|
}
|
|
|
|
/**
|
|
* 获得文件
|
|
* @constructor(file)
|
|
* @constructor(dir,file)
|
|
* @returns {*}
|
|
*/
|
|
export function file(...opts: any[]): any {
|
|
if (!opts[0]) { throw new Error("文件名称不得为 undefined 或者 null !") }
|
|
switch (opts.length) {
|
|
case 1:
|
|
var f = opts[0];
|
|
if (f instanceof File) {
|
|
return f;
|
|
}
|
|
if (typeof f === "string") {
|
|
return new File(f);
|
|
}
|
|
if (f instanceof Path) {
|
|
return f.toFile();
|
|
}
|
|
break;
|
|
default:
|
|
return new File(file(opts[0]), opts[1]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 创建目录
|
|
* @param path
|
|
*/
|
|
export function mkdirs(path: any) {
|
|
// noinspection JSUnresolvedVariable
|
|
file(path).parentFile.mkdirs();
|
|
}
|
|
|
|
/**
|
|
* 创建文件
|
|
* @param file
|
|
*/
|
|
export function create(path: any) {
|
|
var f = file(path);
|
|
if (!f.exists()) {
|
|
mkdirs(f);
|
|
f.createNewFile();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获得文件规范路径
|
|
* @param file
|
|
* @returns {*}
|
|
*/
|
|
export function path(f: any) {
|
|
return file(f).canonicalPath;
|
|
}
|
|
|
|
/**
|
|
* 复制文件
|
|
* @param inputStream 输入流
|
|
* @param target 目标文件
|
|
* @param override 是否覆盖
|
|
*/
|
|
export function copy(inputStream: any, target: any, override: any) {
|
|
Files.copy(inputStream, target.toPath(), StandardCopyOption[override ? 'REPLACE_EXISTING' : 'ATOMIC_MOVE']);
|
|
}
|
|
|
|
/**
|
|
* 读取文件
|
|
* @param path 文件路径
|
|
*/
|
|
export function read(path) {
|
|
var file = file(path);
|
|
if (!file.exists()) {
|
|
console.warn('读取文件', file, '错误 文件不存在!');
|
|
return;
|
|
}
|
|
// noinspection JSPrimitiveTypeWrapperUsage
|
|
return new JavaString(Files.readAllBytes(file.toPath()), "UTF-8");
|
|
}
|
|
|
|
/**
|
|
* 保存内容文件
|
|
* @param path 路径
|
|
* @param content 内容
|
|
* @param override 是否覆盖
|
|
*/
|
|
export function save(path, content, override) {
|
|
var file = file(path);
|
|
if (file.parentFile) {
|
|
file.parentFile.mkdirs();
|
|
}
|
|
Files.write(file.toPath(), new JavaString(content).getBytes("UTF-8"));
|
|
}
|
|
|
|
/**
|
|
* 列出目录文件
|
|
* @param path
|
|
*/
|
|
export function list(path) {
|
|
var dir = file(path);
|
|
// noinspection JSValidateTypes
|
|
if (dir.isDirectory()) {
|
|
return Files.list(dir.toPath());
|
|
}
|
|
console.debug('路径', path, '不是一个目录 返回空数组!');
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* 移动文件
|
|
* @param src 原始目录
|
|
* @param des 目标目录
|
|
* @param override 是否覆盖
|
|
*/
|
|
export function move(src, des, override) {
|
|
Files.move(file(src).toPath(), file(des).toPath(),
|
|
override ? StandardCopyOption['REPLACE_EXISTING'] : StandardCopyOption['ATOMIC_MOVE'])
|
|
}
|
|
|
|
export function del(file) {
|
|
file = file(file);
|
|
if (!file.exists()) {
|
|
return;
|
|
}
|
|
if (file.isDirectory()) {
|
|
Files.list(file.toPath()).collect(Collector.toList()).forEach(function (f) {
|
|
del(f);
|
|
})
|
|
}
|
|
Files.delete(file.toPath());
|
|
}
|
|
|
|
export function exists(f) {
|
|
return file(f).exists()
|
|
}
|