• 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() :关闭输出流,释放和这个流相关的系统资源。

    对文件和流的操作easy引发异常,所以必需要用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));


  • 相关阅读:
    php出现“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误的一种情况,及解决方法
    nginx配置:支持phpfastcgi,nginx和phpcgi通信,部分nginx常量解释
    一步步构建大型网站架构(转/收藏)
    PHP中$_REQUEST中包含的数据,数据被覆盖问题
    使用linux时碰到的两个问题
    小谈字节序
    备忘录(1)
    [c#]如何编写需要授权才能使用的WebService?
    [XML]XPath小记
    [Misc]如何得知系统存在哪几个COM口?
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7191751.html
Copyright © 2020-2023  润新知