`
android_mylove
  • 浏览: 399463 次
社区版块
存档分类
最新评论

Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作

 
阅读更多

/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
*
http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。

********************************************************************************************/


1、

在Android的java层实现文件的读写操作是非常简单的,可以参看之前写的博文:http://blog.csdn.net/conowen/article/details/7296121

在JNI层实现文件的读写操作的话,就要使用到linux的读写函数了。


2、打开文件


返回值:为一个文件句柄(fd),供read、write等操作。


参数:

pathname: 打开的文件所在路径字符串。如

flags: 文件打开的方式

flag之间可以作“与”运算,如

常用flags
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。
O_CREAT 若欲打开的文件不存在则自动建立该文件。
O_TRUNC 若文件存在并且以可写的方式打开时,此标志位会令文件长度重新清为0,也就是说文件内容清空。
O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
O_SYNC 以同步的方式打开文件。
O_NOFOLLOW 如果参数pathname所指的文件为一符号连接,则会令打开文件失败。
O_DIRECTORY 如果参数pathname所指的文件并非为一目录,则会令打开文件失败。



mode: 文件存储权限

S_IRWXU00700 权限,代表该文件所有者具有可读、可写及可执行的权限。
S_IRUSR 或S_IREAD,00400权限,代表该文件所有者具有可读取的权限。
S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。
S_IXUSR 或S_IEXEC,00100 权限,代表该文件所有者具有可执行的权限。
S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。
S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。
S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。
S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。
S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。
S_IROTH 00004 权限,代表其他用户具有可读的权限
S_IWOTH 00002权限,代表其他用户具有可写入的权限。
S_IXOTH 00001 权限,代表其他用户具有可执行的权限。


3、文件的读(read)操作


返回值:返回实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。

参数

fd:表示文件句柄,是由open函数得到

buf:read()函数会把fd 所指的文件传送count个字节到buf指针所指的内存中

size:要读取的字节数



4、写入操作


返回值 :如果成功write(),就会返回实际写入的字节数。当有错误发生时则返回-1

参数

fd:同上

buf:将要写入到文件里面的内容。

size:要写入的字节数


5、跳转操作


返回值:成功跳转的字节数目,失败为-1

参数

fd:同上

pos:跳转的相对量,可正可负,表示相对位置的前后关系

whence:跳转的方向,whence取值如下所示


注:当size参数=0;whence = SEEK_END;时返回值即为文件大小。


6、关闭操作


7、简单示例

效果图:





7.1、JNI代码:(有JNI_onLoad函数)





7.2、Android.mk文件



7.3、java层代码



最后记得在manifest.xml里面加上SD卡操作权限




分享到:
评论

相关推荐

    Android NDK——Hello JNI

    《Android NDK与JNI开发详解:从Hello World开始》 Android NDK(Native Development Kit)是Google提供的一套工具,允许开发者使用C/C++编写部分应用程序,以利用原生代码的高性能和低级硬件访问能力。JNI(Java ...

    androidndk开发实战

    接着,“Android NDK(r5b)环境搭建及JNI实现.docx”文件着重于JNI(Java Native Interface)的使用,这是Android应用与NDK之间通信的关键桥梁。JNI允许Java代码调用C/C++函数,反之亦然。开发者需要理解JNI的接口...

    Android NDK开发——C回调Java中的方法

    NDK允许开发者在Android应用中混用Java和原生代码,通过JNI(Java Native Interface)来实现两者之间的交互。本篇文章将详细介绍如何在Android NDK开发中实现C回调Java中的方法。 首先,了解NDK和JNI的基础概念是...

    Android-ndk-jni AES加解密 C++

    在Android开发中,有时我们需要在原生C++代码中实现加密和解密功能,以便提高性能或利用已有的C/C++库。本知识点主要聚焦于如何在Android NDK(Native Development Kit)环境下,通过JNI(Java Native Interface)来...

    Android-NDK-MD5-安卓jni 进行md5加密

    在Android开发中,有时我们需要对数据进行加密处理以保护信息安全,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,常用于文件校验和数据加密。本主题聚焦于如何在Android环境中,利用JNI(Java ...

    《Android C++高级编程——使用NDK》_源码.zip

    《Android C++高级编程——使用NDK》提供了Java原生接口(JNI)的概述、Bionic API、POSIX 线程和套接字、C++支持、原生图形和声音API以及NEON/SIMD优化,在一个游戏应用案例的帮助下,你将学到很多关键技能。...

    Android NDK 开发教程二

    - **操作系统**:官方推荐使用 Ubuntu 系统进行开发,但在 Windows 上也可以通过 Cygwin 实现对 NDK 的支持。 - **版本要求**:NDK 仅适用于 Android 1.5 及以上版本。 ##### 3.2 使用示例 开发者可以通过以下步骤...

    非常强大的eclipse中android ndk开发环境的配置说明

    本文档将详细介绍如何在Eclipse中配置Android NDK开发环境,并实现C/C++代码的自动编译以及通过Eclipse使用Ant生成JNI所需的头文件。配置流程包括Linux和Windows两种环境下的步骤。 #### 二、配置前提 确保以下工具...

    Android NDK JNI 经典实例

    Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例

    Android NDK开发JNI及mk

    这是Android NDK开发标准的JNI和Android.mk编写模版,里面的一些东西可能涉及我的项目,但不影响观看

    android ndk开发实例代码

    在Android开发中,JNI通常用于与NDK协同工作,使得Java应用能够利用C++库的性能优势。例如,游戏引擎、图像处理、音频和视频编码等对性能要求高的功能常采用这种方式实现。 在"HelloNdk"这个实例中,我们可能会看到...

    Android NDK 开发教程三

    ### Android NDK 开发教程之 Hello JNI 示例详解 #### 一、引言 在移动应用开发领域,Android NDK (Native Development Kit) 提供了一种使用 C 或 C++ 编写原生代码的方式,这对于提高应用程序性能至关重要。本文...

    Android系统级深入开发——移植与调试 pdf

    《Android系统级深入开发——移植与调试》这本书深入探讨了Android系统的底层开发和调试技术,是Android开发者进阶的重要参考资料。以下将从标题和描述中提取出的关键知识点进行详细阐述。 1. **Android系统移植**...

    Android C++高级编程——使用NDK完整版

    第3章 用jni实现与原生代码通信 57 第4章 使用swig自动生成jni代码 81 第5章 日志、调试及故障处理 111 第6章 bionic api入门 135 第7章 原生线程 155 第8章 posix socket api:面向连接的通信 183 第9章 posix ...

    Android NDK 开发的官方文档(android ndk dev guide)

    **Android NDK 开发详解** Android NDK(Native Development Kit)是Google提供的一款工具集,允许开发者在Android应用中使用C和C++代码,从而利用原生编程语言的高性能和低级硬件控制能力。NDK的主要用途包括处理...

    Ndk-Jni开发实战

    在Android应用开发中,NDK(Native Development Kit)和JNI(Java Native Interface)是两个重要的技术,用于实现Java代码与本地C/C++代码的交互。本实战教程将深入探讨NDK-JNI的开发过程,结合具体的AES加密DEMO,...

    android-ndk(android-ndk-r23b-windows.zip)

    在NDK中,开发者可以编写JNI接口,然后在Android应用的Java层通过这些接口来调用本地代码。 Android-ndk-r23b包含了一系列的编译器、链接器和其他工具,用于将C/C++源代码编译成可以在Android设备上运行的机器码。...

    android-ndk(android-ndk-r23b-linux.zip)

    4. **JNI接口**:Java Native Interface (JNI) 是Android应用与NDK之间通信的关键。通过JNI,Java代码可以调用C/C++函数,反之亦然。这使得混合编程成为可能,既保持了Java的跨平台优势,又能利用原生代码的优势。 ...

Global site tag (gtag.js) - Google Analytics