无法写入android模拟器中的文件

时间:2011-06-16 05:49:26

标签: java android c android-emulator java-native-interface

问题描述

我正在为Android编写应用程序并使用本机代码,并在 Android-Emulator 上进行测试。为了查看JNI代码中发生的情况,我在Android / data / LogTest / 文件夹中创建文件,并在其中写入我的日志信息。

FILE * pFile;
pFile = fopen ("/data/LogTest/Log.txt"", "w");
// .... 
// Write some logs to file ...
// ....

当我第一次运行Android应用程序时,一切正常,我可以看到Log.txt文件中的日志。但当我关闭Android应用程序并再次运行它没有任何事情发生。就像应用程序无法第二次将日志写入文件一样。

自我想法

我认为这个问题的主要原因是 ,当我第一次创建文件时,创建者应用程序名称是ex。 456之后,当我尝试将更多信息写入文件应用程序名称是为了ex。 856因此 应用程序856无法写入已创建应用程序456的文件

问题

  1. 如何启动具有相同名称的应用程序,以便Android让我第二次写入文件。
  2. 或者问题的主要原因可能不是每次获取rundom名称的应用程序。

2 个答案:

答案 0 :(得分:1)

您的代码在我的模拟器上生成错误。但你说

  

当我第一次在Android上运行时   申请一切顺利,我   可以在Log.txt文件中看到日志

也许您可以向我们发送更多代码,以便我们重现错误。
这是我尝试复制你的问题

#include<stdio.h>
#include<jni.h>
#include<android/log.h>//allow android logging
#include<errno.h>//for errors
#include<string.h>

#define  LOG_TAG    "DEO MSG"//all my logs are labeled with this
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

void Java_com_deo_MyActivity_writeLogFileUsingC(JNIEnv * env, jobject thisObject)
{   char filename[]="/data/LogTest/Log.txt";
    LOGE("native method started");//is used exactly like the usual printf()
    FILE * pFile;
    LOGE("trying to open file for writing");
    pFile= fopen(filename, "w");
    if(pFile==NULL)
    {
        LOGE("Failed to open the file %s in mode 'w'.(DETAILS)%s ",filename,strerror(errno));
    }
    else
    {
        LOGE("trying to write to file");
        fprintf(pFile,"logExample  "); //example of a log.
        fclose(pFile);//safely close our file
        LOGE("file writing done");
    }
}

它在logcat中生成的错误是

ERROR/DEO MSG(816): Failed to open the file /data/LogTest/Log.txt in mode 'w'.(DETAILS)No such file or directory

我认为我的代码问题可能是权限问题。更多地为我们描述它 PS:

  • 我个人更喜欢使用logcat进行调试,而不是日志文件

答案 1 :(得分:0)

我认为你不能写在那个文件夹中。在这里阅读答案。使用sdk卡或应用程序目录来存储文件。

File Operations in Android NDK