我读过类似的问题和答案,但没有一个对我有用。 我正在尝试将 sqlite 数据库从 assets 文件夹复制到 application 数据文件夹,但这总是失败,因为未创建目标数据库文件。
尝试1:
databasePath = context.getApplicationInfo().dataDir + "/databases/test.db";
Path path = Paths.get(databasePath);
OutputStream applicationDatabaseStream = Files.newOutputStream(path, StandardOpenOption.CREATE, StandardOpenOption.WRITE);
失败但有异常:
W/System.err: java.nio.file.NoSuchFileException: /data/user/0/eu.example.test/databases/test.db
尝试2:
databasePath = context.getApplicationInfo().dataDir + "/databases/test.db";
OutputStream applicationDatabaseStream = new FileOutputStream(databasePath);
失败但有异常:
W/System.err: java.io.FileNotFoundException: /data/user/0/eu.example.test/databases/test.db: open failed: ENOENT (No such file or directory)
这段代码有什么问题吗?
我希望代码在应用程序数据文件夹中创建文件。
你不能创建这样的路径。
context.getApplicationInfo().dataDir + "/databases/test.db";
dataDir 将存在,但还没有人创建数据库子目录。所以它不会存在,这意味着打开test.db将失败。您必须首先创建整个目录树。