Android资产和NDK:格式化输入,文件名和解决方法

时间:2013-03-06 07:19:02

标签: android android-ndk fopen file-io

关于使用NDK读取文件,我有几个问题。

浏览不同的问题和答案,我找到了this短线程,如果我理解正确的话,说你可以将要从中提取数据的文件保存到SD卡上,然后打开它们标准的C fopen()函数。我试图这样做,但它不起作用。我认为这是路径的问题,因为我正在使用FILE* f = fopen("file_name");,其中file_name存储在SD卡的根目录中。

另外,如果我们通常在任何桌面应用程序上使用fopen()打开和读取文件,那么我们是否可以使用ifstream读取格式化输入,如果我们直接从SD卡读取?

感谢您的帮助。

NAX

1 个答案:

答案 0 :(得分:1)

使用JNI在Android上正常运行文件IO。也许您正在尝试使用错误路径打开文件而不检查返回代码?我修改了hello-jni示例,以证明确实可以打开文件并写入它。我希望这会有所帮助。

#include <string.h>
#include <jni.h>
#include <stdio.h>

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                              jobject thiz )
{
    FILE* file = fopen("/sdcard/hello.txt","w+");

    if (file != NULL)
    {
        fputs("HELLO WORLD!\n", file);
        fflush(file);
        fclose(file);
    }

    return (*env)->NewStringUTF(env, "Hello from JNI (with file io)!");
}

以下是在我的手机上运行后的结果(带有SD卡):

$ adb -d shell cat /sdcard/hello.txt
HELLO WORLD!