android 内部文件读取

Android 文件管理方法
Android使用的是基于Linux的文件系统,对于文件的访问和管理是通过权限设置来限制的.
在Linux系统中,文件权限分别描述了创建者、同组用户和其他用户对文件的操作限制。
x表示可执行,r表示可读,w表示可写,d表示目录,-表示普通文件。
产生这样的文件权限与程序人员设定的
Android 存储文件的类型
(内部存储)程序开发人员可以建立和访问程序自身的私有文件;
(资源存储)可以访问保存在资源目录中的原始文件和XML文件;
(外部存储)可以在SD卡等外部存储设备中保存文件

Android系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,在Linux系统下的/data/data/<package name>/files目录中
Android系统不仅支持标准Java的IO类和方法,还提供了能够简化读写流式文件过程的函数
FileOutputStream openFileOutput(String filename int mode)
FileInputStream openFileInput(String filename)
参数文件不允许包含描述路径的斜杠(其存储位置固定)
访问模式:

MODE_PRIVATE 私有模式,缺陷模式,文件仅能够被文件创建程序访问,或具有相同UID的程序访问。
MODE_APPEND 追加模式,如果文件已经存在,则在文件的结尾处添加新数据。
MODE_WORLD_READABLE 全局读模式,允许任何程序读取私有文件。
MODE_WORLD_WRITEABLE 全局写模式,允许任何程序写入私有文件。

三个基本的读方法

abstract int read() :读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。
   int read(byte[] b) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。
   int read(byte[] b, int off, int len) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。
其它方法
  long skip(long n) :在输入流中跳过n个字节,并返回实际跳过的字节数。
  int available() :返回在不发生阻塞的情况下,可读取的字节数。
  void close() :关闭输入流,释放和这个流相关的系统资源。
  void mark(int readlimit) :在输入流的当前位置放置一个标记,如果读取的字节数多于readlimit设置的值,则流忽略这个标记。
  void reset() :返回到上一个标记。
  boolean markSupported() :测试当前流是否支持mark和reset方法。如果支持,返回true,否则返回false。

三个基本的写方法

abstract void write(int b) :往输出流中写入一个字节。
   void write(byte[] b) :往输出流中写入数组b中的所有字节。
   void write(byte[] b, int off, int len) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。
其它方法
  void flush() :刷新输出流,强制缓冲区中的输出字节被写出。
  void close() :关闭输出流,释放和这个流相关的系统资源。

对文件和流的操作容易引发异常,所以必须要用try-catch语句

主要核心代码

首先是新建一个文件
private final String FILE_NAME = "Myfile01.txt";
写文件
FileOutputStream fos = null;//声明一个全局变量
//注意下面的语句要进行抛异常处理FileNotFoundException e,IOException e
fos = openFileOutput(FILE_NAME,Context.MODE_PRIVATE);//写流式文件过程的

函数,这里的权限是私有的
String text = entryText.getText().toString();//把输入的内容转化为字符串
fos.write(text.getBytes());//把转化为字符串的内容转化为字节,然后写入
//下面语句写在finally里面
fos.flush();//把缓存里的内容写入到文件
fos.close();//关闭流

读文件

FileInputStream fis = null;//定义一个全局变量
fis = openFileInput(FILE_NAME);//打开要读取的文件
if (fis.available() == 0){//判断文件是否为空,为空就直接返回
 return;
}
byte[] readBytes = new byte[fis.available()];//把文件里的内容转化为字节
while(fis.read(readBytes) != -1){//读文件,直到读到最后
}
String text = new String(readBytes);//把读到的字节转化为字符串

读文件的第二种方法

String path = "/data/data/cn.itcast.file/files/writeable.txt";//得到文件路径
  File file = new File(path);//创建一个文件对象
  FileInputStream inStream = new FileInputStream(file);//读文件
  byte[] buffer = new byte[1024];//缓存
  int len = 0;
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  while( (len = inStream.read(buffer))!= -1){//直到读到文件结束
   outStream.write(buffer, 0, len);
  }
  byte[] data = outStream.toByteArray();//得到文件的二进制数据
  outStream.close();
  inStream.close();
  Log.i(TAG, new String(data));
时间: 2024-10-30 05:25:19

android 内部文件读取的相关文章

文档-android: android 中文件的备份问题

问题描述 android: android 中文件的备份问题 我想问一下,如果我的app 生成了几个文件,有办法压缩备份成一个新的文件吗.? 我看有.backup 后缀的文件,是怎么生成的呢? 谢谢..最好有API 或者文档什么的 解决方案 Android文件访问权限和路径问题Android 本地文件读取, 数据库文件备份android读SDCard中txt文件中文乱码问题 解决方案二: .backup是一些备份文件.总体说来 Android API Level 8及其以上Android系统提供

解析Android资源文件及他们的读取方法详解_Android

Sam在Android开发中,有两种处理资源文件的方式.其一,是将所有资源文件以及JNI程序放置于一个单独的资源包.使用到他们时,使用文件方式读取.或者直接使用C++层代码读取. 其二,则是将资源文件加入到APK内部.使用各种不同的办法去得到其内容.方法一:适合于移植较大的C++程序时使用,因为C++代码数量众多,不太可能修改为JAVA代码.所以将其与资源文件以一定方式存放,并让他们自称体系是个好办法.但这造成软件的发布必须以APK+资源包的方式发布.方法二:则比较适合代码量不是非常大,且资源数

解析Android资源文件及他们的读取方法详解

Sam在Android开发中,有两种处理资源文件的方式.其一,是将所有资源文件以及JNI程序放置于一个单独的资源包.使用到他们时,使用文件方式读取.或者直接使用C++层代码读取. 其二,则是将资源文件加入到APK内部.使用各种不同的办法去得到其内容. 方法一:适合于移植较大的C++程序时使用,因为C++代码数量众多,不太可能修改为JAVA代码.所以将其与资源文件以一定方式存放,并让他们自称体系是个好办法.但这造成软件的发布必须以APK+资源包的方式发布. 方法二:则比较适合代码量不是非常大,且资

android华为手机读取本地文件夹图片获取path路径null,求指导

问题描述 android华为手机读取本地文件夹图片获取path路径null,求指导 android华为手机读取本地文件夹图片获取path路径null,求指导 解决方案 public String getImagePathFromURI(Uri uri) { Cursor cursor = getActivity().getContentResolver().query(uri null null null null); String path = null; if (cursor != null

使用Android内部的DownloadProvider下载文件,并获取cache权限

 Android内部提供了一个DownloadProvider,是一个非常完整的下载工具,提供了很好的外部接口可以被其他应用程序调用,来完成下载工作.同时也提供和很好的下载.通知.存储等机制.在Android的Browser等工具里面都用到了这个DownloadProvider. 但是很遗憾的是,这个DownloadProvider不对app开发人员开放,只作为内部使用. 我们现在去探究如何将DownloadProvider拿来给自己用. 让我们先找到DownloadProvider不能用的原因

android 文件读取-Android文件读取问题,读取不到电脑硬盘中的文件

问题描述 Android文件读取问题,读取不到电脑硬盘中的文件 我在Android项目中读取电脑D盘中的文件,D盘中文件存在,New File的时候文件找不到呢,我建了个java项目可以找到,是不是Android项目中不能读取电脑硬盘中的文件啊? 解决方案 楼主解决了吗.....我也遇到了这个问题 解决方案二: 好吧 楼主我解决了 Android 项目开发中 虽然存在D盘 但是虚拟机和真机Debug的时候 手机里都没有D盘呀 所以Java项目可以找到这个文件而项目无法读取D盘的文件

cocos2dx3.x-Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙。求

问题描述 Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙.求 Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙.网上的代码也看完了,不顶用.想要个人来交流. 解决方案 顶起来,大神们,小弟今天是要离不开公司了.拜托了

Android清空应用内部文件缓存_Android

Android应用中加载的图片以及一些数据缓存怎么清掉呢?最近在做项目中遇到了这个问题,网上搜了一下找到了不少的源代码,综合了这些源码,下面给大家说一下吧,怎么有效的清除应用内存的缓存信息? 清除应用内部缓存主要包含以下几大模块: 一.清除应用本地所有数据库缓存 /** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */ public static void cleanDatabases(Context con

Android实现文件的保存与读取功能示例_Android

本文实例讲述了Android实现文件的保存与读取功能.分享给大家供大家参考,具体如下: 注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径 getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache 1. 编写文件读取与写入功能实现类 FileServi