HarmonyOS 鸿蒙Next:arkts中支持读取当前代码相对目录下的文件吗?如果可以的话可以同步读取吗?

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:arkts中支持读取当前代码相对目录下的文件吗?如果可以的话可以同步读取吗? 如题,我在开发一个和 webview 通信的 util,需要维护一段页面中注入的代码。一开始代码是这样写的:

/**
 * 获取注入 web 页面中注入的 JSBridge 初始化代码.
 * @returns
 */
function getWebPageJSBridgeInitCode(): string {
  return `(function() { /*注入代码内容, 多行*/ })()`;
}

但因为这样的话这些注入的代码很难维护,因为没有编辑器的高亮支持,很容易有语法错误。

所以想改进下,把这段代码改成从当目录的相对目录中引入,这样就可以比较方便的维护这段代码了。预期的代码格式如下:

/**
 * 获取注入 web 页面中注入的 JSBridge 初始化代码.
 * @returns
 */
function getWebPageJSBridgeInitCode(): string {
  // 向 node 中一样同步读取相对目录下的文件内容
  const injectCodeFilePath = fs.readFileSync(__dirname + './web-page-bridge-init-code.js');
  const injectCode = fs.readFileSync(injectCodeFilePath, 'utf-8')

  return injectCode;
}

我想问下上面的 node 风格的代码在 artks 中可以实现吗?

我目前找到的能够成功读取代码的方式是将代码放到 rawfile 目录下,然后用如下的代码进行异步读取:

import buffer from '@ohos.buffer'

const context = this.getContext();
const codeBuffer = await context.resourceManager.getRawFileContent('inject-page-init-code.js');
const codeStr = buffer.from(codeBuffer).toString();

AlertDialog.show({
  title: '提示', message: '文件内容:' + codeStr, gridCount: 6,
  primaryButton: { value: '确定', action: () => {
  } }
});

但这个代码只能读取 rawfile 目录下,不能按相对目录读取,而且是异步的,和自己的预期有点差距。不知道目前是否可以实现自己所期望的那种 node 风格的文件读取。

这部分官方的资料有点零碎,自己找了半天也没有找到太多信息,下面是自己找到的多少有些参考价值的资料:

  1. 链接
  2. 链接

更多关于HarmonyOS 鸿蒙Next:arkts中支持读取当前代码相对目录下的文件吗?如果可以的话可以同步读取吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

您好,请您通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持。

更多关于HarmonyOS 鸿蒙Next:arkts中支持读取当前代码相对目录下的文件吗?如果可以的话可以同步读取吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


多谢,已提单,

提工单问了华为的技术同学,目前得到的结论是:

  1. 只支持访问 rawfile 目录下的文件读取

  2. API9 不支持同步读取 rawfile 下的文件内容,但 API10 会支持

照着博主的方式试了下, 报错了, 请大佬指导下

Structural typing is not supported (arkts-no-structural-typing)

cke_5155.png

在HarmonyOS鸿蒙Next的arkts(ArkUI的TypeScript声明文件扩展)环境中,支持读取当前代码相对目录下的文件,但具体实现方式依赖于arkts的运行环境和文件访问权限。

通常,arkts作为UI框架,主要关注于界面的构建和交互逻辑,而文件读取等底层操作则依赖于鸿蒙系统的文件系统API或者应用沙箱内的文件访问机制。如果arkts代码运行在支持文件系统访问的环境中(如某些特定的应用或服务),则可以通过相应的API来读取当前代码相对目录下的文件。

关于同步读取,这取决于文件读取操作的实现方式。如果文件系统API提供了同步读取的接口,那么arkts中的代码就可以使用这些接口来实现同步读取。然而,在大多数情况下,为了不影响UI的流畅性,推荐使用异步读取文件的方式,以避免阻塞主线程。

综上所述,arkts中是否支持读取当前代码相对目录下的文件以及是否可以同步读取,取决于具体的运行环境和API支持情况。开发者需要参考鸿蒙系统的官方文档或API指南来获取更详细的信息。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部