java - 文件操作JNI

标签 java android c android-ndk java-native-interface

我是 android 和 JNI 的新手。我想访问设备中的文件。我已经向 list 添加了权限,但它不起作用。

Java 代码:

public class MainActivity extends ActionBarActivity {
public native String  setFilePath(String path);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    TextView  tv = new TextView(this);

    tv.setText( "1111" );


    setContentView(tv);
    String path = Environment.getExternalStorageDirectory().getPath()+"/xyz"; 
    Log.i("java ", path);
    setFilePath(path);

}
}

C 代码:

jint Java_package_MainActivity_setFilePath(JNIEnv* env, jobject this,jstring Path){



path = (*env)->GetStringUTFChars( env, Path , NULL ) ;
__android_log_print(ANDROID_LOG_DEBUG, "SO", "fopen(%s)", path);
FILE* file = fopen(path,"ab+");
(*env)->ReleaseStringUTFChars( env, Path , path );
fputs("Testing!\n", file);
fclose(file);
return 0;
}

出现错误:

Fatal signal 11 (SIGSEGV) at 0x0000000c (code=1), thread 16152 

最佳答案

// Path is an jstring passed as an arg of a function
char *path = (*env)->GetStringUTFChars( env, Path , NULL ) ;
__android_log_print(ANDROID_LOG_DEBUG, "SO", "fopen(%s)", path);
FILE* file = fopen(path,"ab+");
(*env)->ReleaseStringUTFChars( env, Path , path );
fputs("Testing!\n", file);
fclose(file);

如果不起作用,请将打印内容发布到 logcat。

关于java - 文件操作JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922525/

相关文章:

java - 使用 JPA 指定索引(非唯一键)

java - Docker/Hibernate/PostgreSQL - 将运行 Hibernate/SpringBoot 应用程序的容器与 postgreSQL 容器连接不工作

android - 如何从 Android 中的电子邮件 URL 打开已安装的应用程序?

c - 苹果 vDSP 示例的问题

c - 这个递归行如何实现打印反转的字符串?

C: 有没有办法降低 printf 输出的速度

java - 用于 Ubuntu 和 SuSE 的 Java 应用程序的安装程序/打包程序

java - @PathParam 注解中的可选参数

java - 执行后台任务——替代 AsyncTask?

android - 按照指南制作相机应用程序,出现错误。安卓SDK