2011-10-04 56 views
1

在我的Android应用程序我正在使用自己的java库,从jar中提取.db-文件。在Java桌面上效果很好,但是当我尝试在android上完成时,输入流会永远阻塞。复制方法如下:从.apk提取文件?

InputStream in = classloader.getResourceAsStream(...); 
OutputStream out = new FileOutputStream(new File(...)); 
try { 
    while ((read = in.read()) != -1) { 
    out.write(read); 
    } 
} finally { 
    try { 
    in.close(); 
    } catch (final Exception e) { 
    LOGGER.debug("Error", e); 
    } 

    try { 
    out.close(); 
    } catch (final Exception e) { 
    LOGGER.debug("Error", e); 
    } 
} 

我想将这个文件拷贝到外部文件目录和android.permission.WRITE_EXTERNAL_STORAGE是理所当然的。

有没有办法访问/data/app/...apk中的文件?如果没有,我怎么能检测到它不能永久阻塞访问?

+0

这是关于运送您的应用程序与填充数据库? –

+0

是的,应用程序应该包含一个填充的数据库。首次启动时,数据库应该被提取和更新。 – Stephan

回答

2

您应该将数据库文件放在/assets文件夹中,并在第一次运行时将其复制到/databases文件夹中。有关这方面的教程可以找到here

但是,如果您只想创建表格和一些样品条目,则可能需要使用SQLiteOpenHelper中的onCreate()-方法来执行此操作。

+0

我会尝试。但我想将文件复制到外部存储器。 – Stephan

+0

你也可以这样做(如果你有“写入外部存储” - 许可)。 –

0

回答这样一个问题:我们只能从我们已经拿到了APK提取的类文件,我们不会得到layout/xml文件或任何其他文件。

有几种方法可以从apk中提取类文件。