Android文件相关:RandomAccessFile介绍与使用demo

UniApp Android文件操作进阶:原生插件开发与高版本权限适配实战 在移动应用开发中,文件系统操作是处理用户数据、缓存和离线功能的核心基础。其原理涉及操作系统对存储空间的沙盒化管理,以确保应用数据的安全与隔离。随着Android系统版本的迭代,特别是Android 11引入的强制执行作用域存储,传统的基于路径的直接文件访问技术面临重大挑战,其价值在于平衡功能实现与用户隐私保护。在跨平台开发框架如UniApp中,标准的H5+文件API在高版本Android上常因权限和路径问题受限,无法满足**递归遍历大目录**、**大文件断点续传**等高级场景需求。因此,通过开发原生插件,直 阅读详情



原创文章,转载请注明出处:http://blog.youkuaiyun.com/android_zyf/article/details/63428241


一,RandomAccessFile是用来干嘛的?

在访问文件时,文件就是一个大型的byte数组,存在指向该隐含数组的光标或索引,称为文件指针.
RandomAccessFile的实例对象,可以通过挪动该指针,有选择性的获取文件中的内容.
类似于根据角标在数组或集合中取值.
api文档地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

示例

RandomAccessFile每次读取数组中的一元素,就会将文件指针挪动一个位置.
如果 RandomAccessFile的实例对象以读取/写入模式创建,那么可以从文件指针的位置,开始写入文件,并且每写入一个字节,文件指针会对应着向前移动一个位置.
在写入的过程中,如果超出隐含数组的 length后继续写入,那么会导致该数组扩展.
文件指针的获取方式与设置方式在下面的方法介绍中有.
注: 如果数组length为10,如果做类似操作:读取11个元素.那么会抛出 EOFException异常(是一种IOException).
注: 如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。
注: 如果流已被关闭,则可能抛出 IOException。

二,方法介绍

构造方法

RandomAccessFile(File file, String mode)
* 创建从中读取和向其中写入(可选)的随机访问文件流,参数为一个文件对象.

RandomAccessFile(String name, String mode)
* 创建从中读取和向其中写入(可选)的随机访问文件流,参数为一个文件的绝对路径.

关于mode参数:
* “r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
* “rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
* “rws” 打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
* “rwd” 打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备。

获取文件指针

long getFilePointer() :得到该RandomAccessFile对象当前的偏移量

设置文件指针

void seek(long pos) :将文件指针移动到pos位置,在该位置发生下一个读取或写入操作。

获得文件长度与设置文件长度

long length() :返回此文件的长度.
void setLength(long newLength) :设置此文件的长度

跳过

int skipBytes(int n) :尝试跳过输入的 n 个字节以丢弃跳过的字节.

获得文件通道对象

FileChannel getChannel() :返回与此文件关联的唯一 FileChannel 对象(文件通道对象).

读取与写入的方法就是read与write,代码提示一找就ok了.

三,示例代码

byte[] result = new byte[1024];

//根据文件路径,获得对应的可读randomAccessFile对象
//以只读模式打开文件
RandomAccessFile randomAccessFile = new RandomAccessFile(table.getBookFile(),"r");

//将randomAccessFile对象关联的文件中的内容,读取到result字节数组中
randomAccessFile.read(result);
//将读取到的1024个字节,转换成字符串形式,准备展示
String showContent = new String(result);

//获得当前的文件指针的角标,保存在currentIndex中
long currentIndex = randomAccessFile.getFilePointer();

//读取下一段内容
randomAccessFile.read(result);

//读取上一段内容
//先讲文件指针的角标挪到前面两个1024长度的位置
//比如有三百个数,你查了一百个:从0-100
//又查了一百个:从100-200
//那么现在角标是200
//你想查上一段的内容
//应该从0开始查,差一百个,获取到的内容才是正确的
//所以这里挪两个1024的长度
randomAccessFile.seek(currentIndex - 1024 * 2);

//再读一段内容到result数组中
randomAccessFile.read(result);
//准备显示下面的数据
showContent = new String(result);
4B认知模型端侧部署实战:轻量化AI的确定性推理之路 认知模型正成为大模型落地的关键演进方向,它区别于传统语言模型,聚焦可验证、可追溯、可审计的结构化决策能力。其核心原理在于分层架构设计(感知-关系-决策)与知识图谱约束下的硬性输出边界,从而在推理链保真度、反事实鲁棒性等关键指标上实现超越通用大模型的确定性表现。技术价值体现在边缘设备上的低延迟、高稳定性与强合规性,尤其适用于医疗初筛、工业故障归因、法律条文引用等强逻辑、低容错场景。本文基于‘明日新程’4B参数认知模型,深入解析其HCP架构、CTS评测体系及硬件感知型端侧部署全流程,为工程师提供从理论到真机落地 阅读详情

相关推荐

RandomAccessFile随机文本,使用多线程处理

RandomAccessFile随机文本,使用多线程处理复制文件

RandomAccessFile与内存映射文件

RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(...

junJZ_2008的专栏 2086

花1K内存实现高效I-O的RandomAccessFile类

花1K内存实现高效I-O的RandomAccessFile类 自己搜搜这个关键字. 我主要是用来优化Android上多线程断点下载的写文件效率 RandomAccessFile是操作硬盘的,比操作内存的数据慢了几百万倍, 所有有人做出优化,我特上传代码

android randomaccessfile 优化,RandomAccessFile为“随机读取类”

* 随机读取和写入流RandomAccessFile* 支持读取和写入随机访问文件* RandomAccessFile raf=new RandomAccessFile(文件对象,读写模式);跟着计划、今天学习了很多内容、相信忘记的几率很大、所以留下笔记:packageiotest;importjava.io.File;importjava.io.IOException;&...

weixin_39629352的博客 858

Java使用RandomAccessFile类对文件进行读写

本篇文章主要介绍了Java使用RandomAccessFile类对文件进行读写,详细的介绍了RandomAccessFile类的使用技巧和实例应用,有兴趣的可以了解一下

AD9361数字调制入门:从IQ调制原理到动手实现第一个ASK信号(Vivado工程详解)

本文详细介绍了如何使用AD9361射频收发器实现ASK数字调制,从IQ调制原理到Vivado工程实现。通过Verilog代码示例和FPGA架构设计,帮助开发者理解纯逻辑实现数字调制解调的关键技术,特别适合软件无线电(SDR)初学者入门实践。

weixin_29158047的博客 374

android randomaccessfile 权限,Android文件相关:RandomAccessFile介绍与使用demo

原创文章,转载请注明出处:http://blog.youkuaiyun.com/android_zyf/article/details/63428241一,RandomAccessFile是用来干嘛的?在访问文件时,文件就是一个大型的byte数组,存在指向该隐含数组的光标或索引,称为文件指针.RandomAccessFile的实例对象,可以通过挪动该指针,有选择性的获取文件中的内容.类似于根据角标在数组或集合...

weixin_39781452的博客 1013

5分钟搞定Unity+Visual Studio开发环境配置(含C#游戏开发工作负载)

本文提供了一份详细的Unity与Visual Studio开发环境配置指南,帮助开发者在5分钟内完成C#游戏开发工作负载的设置。从Unity Hub安装到Visual Studio关键组件选择,再到常见问题排查,全面覆盖环境搭建的各个环节,显著提升游戏开发效率。

weixin_29014237的博客 248

Android断点下载RandomAccessFile实现

摘要:本文实现断点下载文件,支持多调线程,最大数量10条。(下载测试用例为APK文件,保证了文件的正确性。) github已经托管项目,可以下载demo查看,同事提供在线引用,使用方式参考、: https://github.com/yuanhy/Appframework 源码:https://github.com/yuanhy/AppframeworkLib/blob...

u012417576的专栏 862

【Cubietruck】Qt5.8.0 x64、x86、armhf三个版本的编译安装

一、       Preparation 以下环境配置支持虚拟机和实体机,但是实体机生产效率会相对高一点,实体机编译Qt的速度是虚拟机两倍以上。 若使用虚拟机,推荐使用VirtualBox,开源免费,尽量不要使用Vmware破解版。   Download List   名称 链接 下载项目 OS https://mirro

beatfan的博客 3658

Qt 文件对话框(QFileDialog)实战指南 —— 从基础到高级应用

本文是Qt文件对话框(QFileDialog)的实战指南,从基础静态函数调用到高级对象模式应用,全面解析了文件选择、保存、目录选取及多选等核心功能。文章深入探讨了MIME类型过滤、自定义侧边栏、信号槽实时响应及状态持久化等高级技巧,并提供了跨平台开发中的避坑指南与最佳实践,帮助开发者高效、稳健地集成文件操作功能。

weixin_29306261的博客 376

Android RandomAccessFile 往文件中写数据

首先AndroidManifest.xml里要添加对应的权限: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT

u014630142的博客 907

点云中概念:匹配、配准、融合

匹配,是寻找与一幅图相似的图像(不对寻找到的图像做矫正)。 配准,是寻找相似图像但是变形后的图像(需要做一些旋转之类的校正变换)。 融合,是多幅图像连接成一幅大图,视频集成中用的比较多。 1)匹配: 2)配准: 比如由于固定式激光雷达受测量方式的限制和被测物体集合形状的限制,固定的话一次只能扫描被测物体有限范围的点云数据(比如一个面??),这需要在多个视角下进行多次扫描(就是将激光雷达前后左右四个面都扫一下??对的),然而每个视角下得到点云数据都具有独立的坐标系,无法直接进行拼接(拼接就是将四个面

m0_37957160的博客 1万+

RandomAccessFile实现断点续传

一丶概述断点续传是

行动者&&职业化 3349

【转录调控网络】代谢组学与其他组学的联合分析经典模式简介

多组学联合分析经典模式转录组学&代谢组学联合分析 转录组学&代谢组学联合分析 转录组是获得生物体内基因表达的重要方法,代谢组是生物体表型的基础和直接体现者。 转录组测序可以得到大量差异表达基因和调控代谢通路,但由于基因与表型之间很难之间关联,导致关键的信号通路难以确定,因此往往达不到预期的研究目的。代谢产物是生物体在内外调控下基因转录的最终结果,是生物体表型的物质基础。 在系统生物学研究时代,生物过程复杂多变,基因调控网络复杂。针对特定的生理、病理等表型进行研究,利用转录组的数据获得大量差异

小哲的博客 6194

ISP算法:自动白平衡(AWB)

1. 为什么要做白平衡? 人类视觉系统具有颜色恒常性特点,一次人类对物体观察不受光源影响。但是Sensor在不同光线下,物体呈现的颜色不同,在晴朗天空下会偏蓝,在烛光下会偏红。如图: 2.什么是自动白平衡? 为了消除光源对于图像传感器成像的影响,模拟人类视觉系统的颜色恒常性。保证在任何场景下看到的白色是真正的白色。 3. 如何做自动白平衡? 只要乘以一个对角矩阵,便可以进行白平衡...

a200800170331的专栏 1万+

android读写sd卡代码,android读写SD卡中的文件 demo

有时,我们需要将更大的文件保存下来,就不能用手机内置的存储空间,毕竟是有限的,所以将文件保存在SD卡中。要读写SD卡,首先要知道手机上是否有SD卡,且是否可读写Stringstr="";//判断是否有SD卡,且可读str=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)?"有SD卡,且可读...

weixin_42292183的博客 676

Python爬虫实战:如何抓取旅游论坛上的帖子、旅行攻略和评论内容

无论是知名的旅游网站,还是地方性的旅游讨论区,用户发布的旅行贴文、攻略和评论往往包含着大量的宝贵信息。本文将详细介绍如何使用Python编写一个爬虫,抓取旅游论坛上的帖子、旅行攻略和评论内容,涵盖从获取页面内容、解析数据到处理动态加载等各个方面的技术。从基本的请求和网页解析,到动态加载页面的处理,再到数据存储和反爬虫技巧,我们详细讲解了抓取旅游论坛数据的全过程。通过本文的介绍,你可以将所学的爬虫技术应用到其他类似的网站抓取任务中,为后续的数据分析、机器学习等任务提供丰富的数据源。在这种情况下,传统的。

2201_76125261的博客 1557

Android大文件上传秒传之实战篇

picture.png 源码传送门 在上一篇文章我们介绍了获取大文件的一个唯一的特征值MD5,通过MD5我们可以唯一的标识一个文件,并可以实现秒传效果,今天的这篇文章主要介绍大文件的上传操作,当然谈到上传文件,网络是必不可少的,现在也有很多较为流行的网络框架,如volley,OkHttp,Retrofit。而今天的这篇文章是采用最原始的上传文件的方法,通过HttpClient上传文...

贵公子丶笔记 1986

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

多线程断点续传(一)

一、 学习内容1、 基本UI定义 2、 数据库的操作 3、 Service的启动 4、 Activity给service传递参数 5、 使用广播回传数据到Activity 6、 线程和Handler 7、 网络操作:文件的写入,网络往本地磁盘写入 二、 网络下载的具体流程图三、 网络下载的关键点1、 获得网络文件的长度 2、 在本地创建一个文件,设置其长度 3、

烨之魅儿的专栏 752

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

使用原生jdk提供的工具实现多线程下载和断点续传

最近跟着大神学习写了一个java多线程下载和断点续传的demo,在此记录一下相关信息记录 环境准备: 1.准备一个tomcat容器,用来模拟服务器环境,可直接到apache官网下载后解压后即可使用。 2.复制一个较大的文件到tomcat-->webapps-->ROOT目录下,建议复制exe文件,因为没有准备MD5码校验机制,所以在下载后可以通过观察该程序的运行状态判断文件下载是...

lujx_1024的博客 492

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java downloadhelper_GitHub - yaowen369/DownloadHelper: 一个支持多线程,断点续传功能的Android下载工具...

功能特性断点续传支持多线程 (目前版本仅支持单任务单线程,多任务才多线程,未来会继续完善单任务的多线程执行)使用本项目的理由可靠稳定 (我们拥有近百万用户的某个app项目,迭代了近二十个版本,该下载模块久经考验,工作正常)体积很小 (总计只有数十个java文件)无其他依赖 (仅使用sdk本身的api,没有依赖任何第三方库)接入方式简单导入项目implementation 'com.yaoxiaow...

weixin_36474001的博客 348

(7) - IO流 (图)

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------- 一、IO流概述 IO流即输入(Input)输出(Output)流,流是种形象的说法,计算机数据(字节或字符)的转移都是大量、持续的,像水流般。输入指将制定位置的数据读入内存中,输出指将内存数据写到指定的位置上。

斗胆潇洒~★ 937

io流,kotlin编程通俗演义pdf

File类只用于表示文件的信息(名称,大小等 )不能用于文件内容的访问 第一个标识中需要介绍\符号 File file=new FIle(“F:\demo”);记得是双斜杠\或者/ 还可以是File.separator,File.separator表示通用分隔符。三者功能相同 **主要方法 exists();判断文件/文件夹是否存在 mkdir();创建文件夹 如果是多级目录用mkdirs(); delete();删除文件夹 判断是否是一个目录file.isDirectpry(); 是否是一个文件 file

m0_66264588的博客 234

多线程下载器(不含数据库部分)

多线程下载器(不含数据库部分) 1、写在前面:     虽然demo中程序框架已搭建完成,但是由于笔者时间原因,暂时只完成了核心部分:多线程下载的部分,其他数据库、服务通知、暂停部分还未添加到项目中。 2、相关知识点: (1)Java线程及停止线程的方式 (2)Java RandomAccessFile文件操作 (3)HttpURLConnection相关range字段的配置 (4)

DennisJu的专栏 5123
上一篇: JavaScript入门指南---(三)、函数
下一篇: JavaScript入门指南---(四)、DOM对象与内置对象
george_zyf
博客等级 码龄11年 132粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值