从主项目访问时,库项目中的文件给出了Permission denied错误

时间:2014-09-23 08:43:56

标签: android android-library

我正在 -

09-23 01:13:13.488: W/System.err(15728):    java.io.FileNotFoundException: /data/data/com.testapp.main/databases/MYContent: open failed: EACCES (Permission denied)
09-23 01:13:13.489: W/System.err(15728):    at libcore.io.IoBridge.open(IoBridge.java:416)
09-23 01:13:13.489: W/System.err(15728):    at java.io.FileInputStream.<init>(FileInputStream.java:78)
09-23 01:13:13.489: W/System.err(15728):    at com.testapp.main.MainFragmentActivity.backupDatabase(MainFragmentActivity.java:1411)

仅当应用程序用作主应用程序的库时才会出现异常。

工作 -

testApp (data/data/com.testapp.main/databases/MYContent)
    \
     \
      RUN

不工作 -

testApp (data/data/com.testapp.main/databases/MYContent) (library)
    \
     \
      mainApp
       \
        \
         RUN

我知道问题open failed: EACCES (Permission denied)是因为 -

任何其他应用都无法访问不同应用中的文件。

但我的应用testapp与我只是从主应用mainApp访问的图书馆没有区别。

如何访问它?

MainFragmentActivity.java

    String inFileName = "/data/data/com.testapp.main/databases/MYContent";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile); //error here.

1 个答案:

答案 0 :(得分:0)

问题是您正在对此文件的路径进行硬编码。使用getFileStreamPath()getFilesDir()获取适当的位置(类似地,在编写文件时使用Context中的方法)。这将确保代码无论捆绑到哪个应用程序都能正常工作。