我想将storage.db复制到documents或downloads文件夹。获取文件路径非常容易:
const filePath = application.android.context.getDatabasePath("storage.db").getAbsolutePath();
但是,将文件复制到用户有权访问的文件夹并不是一件容易的事。我在整个论坛上进行了搜索,但发现没有任何有用的案例。
我将NativeScript 4.0.1与香草JS结合使用。
我终于找到了解决方案。我已经看到很多用户尝试实现这一目标,希望对您有帮助。
将此添加到您的AndroidManifest.xml中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
安装本地脚本权限:
npm i nativescript-permissions
寻求许可:
const permissions = require('nativescript-permissions');
permissions.requestPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, "");
需要必要的模块:
const fileSystemModule = require("tns-core-modules/file-system");
const application = require("application");
然后,在需要使用此功能的地方创建它:
function copyFile() {
var myInput = new java.io.FileInputStream(appModule.android.context.getDatabasePath("storage.db").getAbsolutePath());
var myOutput = new java.io.FileOutputStream("/storage/emulated/0/databases/storage.db");
try {
var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.class.getField("TYPE").get(null), 1024);
var length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
}
catch (err) {
console.info("Error", err);
}
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
exports.copyFile = copyFile;
就我而言,文件storage.db将被复制到/ storage / emulated / 0 / databases。如果需要创建文件夹,请执行以下操作:
try {
var javaFile = new java.io.File("/storage/emulated/0/newfolder");
if (!javaFile.exists()) {
javaFile.mkdirs();
javaFile.setReadable(true);
javaFile.setWritable(true);
}
}
catch (err) {
console.info("Error", err);
}
如果目标文件夹中的文件名与要复制的文件名相同,则需要先将其删除。这就是为什么您应该创建一个特定的文件夹以确保其为空的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句