android中JNI在C代码中打开文件时获取NULL
我在android应用程序中调用JNI的C代码 调用时一切正常,但当我输入以下代码时:android中JNI在C代码中打开文件时获取NULL,android,c++,c,android-ndk,java-native-interface,Android,C++,C,Android Ndk,Java Native Interface,我在android应用程序中调用JNI的C代码 调用时一切正常,但当我输入以下代码时: FILE* fp = fopen("/storage/sdcard0/input.txt","w+"); if(fp==NULL) return(*env)->NewStringUTF(env,"n"); else return(*env)->NewStringUTF(env,"y"); 它得到“n”。我确信路径是正确的,我在手机终端上尝试了以下命令: cat /storage/
FILE* fp = fopen("/storage/sdcard0/input.txt","w+");
if(fp==NULL)
return(*env)->NewStringUTF(env,"n");
else
return(*env)->NewStringUTF(env,"y");
它得到“n”。我确信路径是正确的,我在手机终端上尝试了以下命令:
cat /storage/sdcard0/input.txt
它给了我文件的内容
编辑:
我试图通过此代码更改文件的权限,但它给出了相同的响应:
void changePerm()
{
Process chperm;
try {
chperm=Runtime.getRuntime().exec("su");
DataOutputStream os =
new DataOutputStream(chperm.getOutputStream());
os.writeBytes("chmod 777 /storage/sdcard0/input.txt\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
chperm.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我还添加了此权限,但没有任何更改:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我认为文件的权限实际上是
0777
您添加了android.permission.READ\u EXTERNAL\u STORAGE
,但尝试打开以进行写入
FILE* fp = fopen("/storage/sdcard0/input.txt","w+");
您可以通过检查errno
来获取错误,并使用获取消息
您必须打开该文件以仅读取
“r”
或添加写入权限您是否尝试分解您的语句以查看哪一行引起了问题?您是否查看了权限?是什么让你认为你的应用程序拥有从外部存储根目录读/写的权限?@Al-mo没有必要这么做,因为我知道发生了什么。fopen()返回null。我想知道为什么?@Erik我没有调查权限。但是,当您添加需要权限的代码时,程序会停止运行,而不会得到null。我说的对吗?不是真的。。。这取决于文件所在的位置。如果它位于公共区域或您的某个应用程序文件夹中,则应该没有问题。我建议您在此处阅读有关外部存储的内容:
FILE* fp = fopen("/storage/sdcard0/input.txt","w+");