2013-07-12 161 views
0

项目内文件中使用JNI我不能访问文件就像这样:获取相对路径JNI

ifstream file("file.txt"); 

file.txt是在文件夹jni,这是相同的文件夹作为本地代码的文件

我只能访问绝对路径("/sdcard/file.txt"),但这个技巧并不是我要找的。 尝试"data/data/com.example.SomeExample/jni/file.txt"但没有运气。

在本地代码中工作时应如何将文件称为相关路径?

+0

'Context.getFilesDir()'会为您提供特定于应用程序的文件目录。 (您的活动是一个上下文。)您可以使用Java查询并将其传递到您的本机代码,或将您的活动传递给JNI并直接查询。将该路径与所需的任何文件名连接起来。你不想做的是硬编码路径,因为它不能保证应用框架具有特定的价值。 – fadden

+0

@fadden:你能否给我一个直接从JNI查询getFilesDir()的例子,并将其作为答案发布,以便我可以接受它? –

回答

0

jni文件夹未添加到您的APK中。如果你想要将文件与应用程序捆绑在一起,我建议将它们放在assets文件夹中。如果assets文件夹尚不存在,请将其与jni文件夹放在同一级别(因此它们是兄弟)。

如果采取这种方法,您将不得不使用资产管理器。这有一个本地接口,在android/asset_manager.h中找到。打开你的文件使用:

AAsset *a = AAssetManager_open(pAssetManager, "file.txt", AASSET_MODE_BUFFER); 
if (a) 
{ 
    const void *res = AAsset_getBuffer(a); 
    //do something with the file! 
    AAsset_close(a); 
} 

有不同的标志,你可以通过,而不是AASSET_MODE_BUFFER