C语言读写文件

       上一篇文章android JNI 实例 中,讲到了如何实现用一个JNI用来读写文件,但是只是实现了对接口的调用,并未写出在c文件中是怎样实现文件读写的,这篇文章将写出c语言的具体实现,把WriteFile方法的具体实现补充完整。

   jstringJava_com_example_bootanim_FileOPT_WriteFile(JNIEnv *env,

       jobjectthiz, jstring oldpath, jstring newpath){//oldFile ="/system/build.prop";

                     int from_fd;

                      int to_fd;

                     long file_len=0;

                     int ret=1;

                     char buffer[BUFFER_SIZE];

                     char *ptr;

       //下面是把string转换成const char *型,在c语言中openfile的函数是constchar *

       const char *oldfilea =(*env)->GetStringUTFChars(env, oldpath, 0);

                    const char *newfilea =(*env)->GetStringUTFChars(env,newpath,0);

                    ALOGI("jniooooffff:%s",oldfilea);

                   if((from_fd=open(newfilea,O_RDONLY | O_NOFOLLOW))==-1) {

                             ALOGI("jniooooxxx from_fd fail");//c文件中的log输出,参照后面的做法

                             return "0";

                   }

                  ALOGI("jniooooxxx to_fdopen");

                   if((to_fd=open(oldfilea,O_WRONLY|O_NOFOLLOW))==-1) {

                               ALOGI("jniooooxxx to_fd= fail");

                                return "0";

                   }

                  file_len=lseek(from_fd,0L,SEEK_END);

                  lseek(from_fd,0L,SEEK_SET);

                   ALOGI("jniooooxxxwhile");

                  while(ret) {

                            ret= read(from_fd, buffer, BUFFER_SIZE);

                            if(ret==-1){

                                         ALOGI("jniooooxxx ret==-1");

                                        return "0";

                            }

                            write(to_fd, buffer, ret);

                            file_len-=ret;

                             bzero(buffer,BUFFER_SIZE);

                  }

                  ALOGI("jniooooxxxclose");

                  close(from_fd);

                  close(to_fd);

                  return (*env)->NewStringUTF(env," opecccccccc!");

    }


关于jni输出log,参照下面做法:

    1.android.mk中加入LOCAL_STATIC_LIBRARIES:= libcutils liblog

    2..c文件中加入:

       #include<utils/Log.h>

       #include<stdlib.h>

    3.ALOGI("jniooooffff:%s",oldfilea);//jniooooffffTAGoldfilea是我们要输出的字符串。




      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值