文件
文件 file
文件读取
BetterGI
提供了安全的文件读写功能,支持同步和异步操作,可以读取文本文件、图像文件以及写入文件。
文件读取方法
1. 同步读取文本 - readTextSync
const content = file.readTextSync(path);
参数说明:
path
: 文件路径(字符串)
返回值:
- 字符串,表示文件的内容
示例:
// 同步读取文本文件
try {
const content = file.readTextSync("test/example.txt");
log.info(`文件内容: ${content}`);
} catch (error) {
log.error(`读取文件失败: ${error}`);
}
2. 异步读取文本 - readText
// Promise方式
const content = await file.readText(path);
// 回调方式
await file.readText(path, callback);
参数说明:
path
: 文件路径(字符串)callback
: 回调函数,格式为function(error, content)
返回值:
- Promise方式:返回
Promise<string>
,表示文件的内容 - 回调方式:通过回调函数返回内容
示例:
Promise方式:
(async function() {
try {
const content = await file.readText("test/async-example.txt");
log.info(`异步读取内容: ${content}`);
} catch (error) {
log.error(`异步读取失败: ${error}`);
}
})();
回调方式:
(async function() {
await file.readText("test/callback-example.txt", (error, content) => {
if (error) {
log.error(`读取失败: ${error}`);
} else {
log.info(`读取内容: ${content}`);
}
});
})();
3. 同步读取图像 - readImageMatSync (0.44新增)
const mat = file.readImageMatSync(path);
参数说明:
path
: 图像文件路径(字符串)
返回值:
- OpenCV的Mat对象,表示读取的图像
示例:
try {
const imageMat = file.readImageMatSync("images/example.png");
log.info(`图像尺寸: ${imageMat.width}x${imageMat.height}`);
// 进行图像处理...
} catch (error) {
log.error(`读取图像失败: ${error}`);
}
完整示例
(async function () {
// 同步读取文本示例
function syncReadTextExample() {
try {
const path = "test/example.txt";
const content = file.readTextSync(path);
log.info(`同步读取文本成功,内容: ${content}`);
} catch (error) {
log.error(`同步读取文本失败: ${error}`);
}
}
// 异步读取文本示例 (Promise方式)
async function asyncReadTextExample() {
try {
const path = "test/async-example.txt";
const content = await file.readText(path);
log.info(`异步读取文本成功,内容: ${content}`);
} catch (error) {
log.error(`异步读取文本失败: ${error}`);
}
}
// 异步读取文本示例 (回调方式)
async function callbackReadTextExample() {
const path = "test/callback-example.txt";
await file.readText(path, (error, content) => {
if (error) {
log.error(`回调读取文本失败: ${error}`);
} else {
log.info(`回调读取文本成功,内容: ${content}`);
}
});
}
// 同步读取图像示例
function readImageExample() {
try {
const path = "images/example.png";
const imageMat = file.readImageMatSync(path);
log.info(`读取图像成功,尺寸: ${imageMat.width}x${imageMat.height}`);
// 图像处理示例
// const grayMat = imageMat.CvtColor(ColorConversionCodes.BGR2GRAY);
// const threshold = grayMat.Threshold(127, 255, ThresholdTypes.Binary);
// 使用完后释放资源
// imageMat.Dispose();
// grayMat.Dispose();
// threshold.Dispose();
} catch (error) {
log.error(`读取图像失败: ${error}`);
}
}
// 执行示例
syncReadTextExample();
await asyncReadTextExample();
await callbackReadTextExample();
readImageExample();
})();
文件写入方法 (0.44.3 新增)
1. 同步写入 - writeTextSync
const result = file.writeTextSync(path, content, append);
参数说明:
path
: 文件路径(字符串)content
: 要写入的内容(字符串)append
: 是否追加模式(布尔值,默认为false表示覆盖写入)
返回值:
- 布尔值,表示写入是否成功
示例:
// 覆盖写入
const result1 = file.writeTextSync("test/example.txt", "这是覆盖写入的内容");
// 追加写入
const result2 = file.writeTextSync("test/example.txt", "这是追加的内容", true);
2. 异步写入 - writeText
// Promise方式
const result = await file.writeText(path, content, append);
// 回调方式
await file.writeText(path, content, callback, append);
参数说明:
path
: 文件路径(字符串)content
: 要写入的内容(字符串)append
: 是否追加模式(布尔值,默认为false表示覆盖写入)callback
: 回调函数,格式为function(error, result)
返回值:
- Promise方式:返回
Promise<boolean>
,表示写入是否成功 - 回调方式:通过回调函数返回结果
示例:
Promise方式:
(async function() {
// 覆盖写入
const result1 = await file.writeText("test/async-example.txt", "异步写入的内容");
if (result1) {
log.info("异步写入成功");
}
// 追加写入
const result2 = await file.writeText("test/async-example.txt", "异步追加的内容", true);
if (result2) {
log.info("异步追加成功");
}
})();
回调方式:
(async function() {
await file.writeText("test/callback-example.txt", "使用回调的内容", (error, result) => {
if (error) {
log.error(`写入失败: ${error}`);
} else {
log.info("写入成功");
}
});
// 追加模式
await file.writeText("test/callback-example.txt", "追加的内容", (error, result) => {
if (error) {
log.error(`追加失败: ${error}`);
} else {
log.info("追加成功");
}
}, true);
})();
完整示例
(async function () {
// 同步写入示例
function syncWriteExample() {
const content = "这是同步写入的测试内容";
const path = "test/sync-example.txt";
const result = file.WriteTextSync(path, content);
if (result) {
log.info("同步文件写入成功");
} else {
log.error("同步文件写入失败");
}
// 追加内容
const appendResult = file.writeTextSync(path, "\n这是追加的内容", true);
if (appendResult) {
log.info("同步追加内容成功");
}
}
// 异步写入示例 (Promise方式)
async function asyncWriteExample() {
const content = "这是异步写入的测试内容";
const path = "test/async-example.txt";
try {
const result = await file.writeText(path, content);
if (result) {
log.info("异步文件写入成功");
// 追加内容
const appendResult = await file.writeText(path, "\n这是异步追加的内容", true);
if (appendResult) {
log.info("异步追加内容成功");
}
}
} catch (error) {
log.error(`异步写入出错: ${error}`);
}
}
// 异步写入示例 (回调方式)
async function callbackWriteExample() {
const content = "这是使用回调的测试内容";
const path = "test/callback-example.txt";
await file.writeText(path, content, (error, result) => {
if (error) {
log.error(`回调写入失败: ${error}`);
} else {
log.info("回调写入成功");
}
});
}
// 执行示例
syncWriteExample();
await asyncWriteExample();
await callbackWriteExample();
})();
文件读写组合示例
(async function () {
// 读取文件,修改内容后写回
async function readModifyWriteExample() {
const path = "test/data.txt";
try {
// 读取文件
let content = await file.readText(path);
log.info(`原始内容: ${content}`);
// 修改内容
content += "\n添加的新内容 - " + new Date().toLocaleString();
// 写回文件
const writeResult = await file.writeText(path, content);
if (writeResult) {
log.info("修改并写回成功");
} else {
log.error("写回文件失败");
}
} catch (error) {
log.error(`操作失败: ${error}`);
// 如果文件不存在,创建新文件
const newContent = "这是新创建的文件 - " + new Date().toLocaleString();
const createResult = await file.writeText(path, newContent);
if (createResult) {
log.info("创建新文件成功");
}
}
}
await readModifyWriteExample();
})();
注意事项
路径安全:所有路径都会被规范化和验证,确保不会访问到根目录以外的文件
错误处理:
- 同步方法可能会抛出异常,建议使用try/catch捕获
- 异步方法可以使用try/catch或回调函数处理错误
图像读取:
- 图像读取使用OpenCV的Mat格式,适合进行图像处理
- 默认以彩色模式(ImreadModes.Color)读取图像
文件扩展名限制:只允许写入以下扩展名的文件:
- .txt, .json, .log, .csv, .xml, .html, .css
文件大小限制:写入内容不能超过999MB
目录创建:如果文件所在目录不存在,会自动创建