首页 > 系统 > Android > 正文

Android IO流使用详解-SDcard

2019-11-09 13:46:58
字体:
来源:转载
供稿:网友
Android IO流使用详解一.Android IO流java IO%20流按照不同类型来分,可以从以下几个方面来进行分类: %20 1.输入流/输出流输入流和输出流 InputStream 和 OutputStream(基类%20抽象类)一个流是字节的源或目的地,其次序是有意义的。例如,一个需要键盘输入的程序可以用流来做到这一点。流可以分成两种:输入流和输出流。可以从输入流读,但不能对它写。要进行写操作就必须使用输出流InputStream 和 OutputStream是Java流类中的两个最基本的类,Java中所有其他的流类都是继承自这两个类。 %20 2.字节流/字符流字节流:可以处理所有类型的数据,如MP3,图片,文字,视频等。在读取时,读到一个字节就返回一个字节。(在JAVA中对应的类以Stream结尾)字符流:仅能够处理纯文本数据,如txt文本。在读取时,读到一个或多个字节,先查找指定的编码表,然后将查到的字符返回。(在JAVA中对应的类都以Reader或Writer结尾) %20 3.节点流/处理流节点流和处理流,Java的IO使用装饰者模式将IO流分成了底层节点流和上层处理流。节点流直接和底层的物理存储节点关联,虽然不同的物理节点获取的节点流可能存在差异,但程序可以把不同的物理节点包装成统一的处理流,从而允许程序使用统一的IO代码来操作不同的物理节点。这就是封装的典型应用:不用考虑底层不同的节点流,只需将节点流封装成处理流来调用。二.字节、字符、编码一个字节等于8为二进制,即一个8位的二进制数,是一个很具体的存储空间。字符是人们使用的记号,抽象意义上的一个符号。字符集又称编码如汉字GB2312中哪些汉字,字母,符号会被收入标准中,所包含的“字符”的集合叫做“字符集”规定每个“字符”分别用一个字节还是多个字节存储。用哪些字节存储,这个规定叫做编码三.IO流常用方法1.字节流常用方法InputStream类的主要方法:int read()%20 %20 %20 %20 %20 从流中读出一个字节的数据 int read(byte[] b)%20 %20 %20 %20 %20 %20 从流中读取数据并存放到数组b中int read(byte[] b, int off,int len)%20从输入流中读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始 void close()%20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20关闭当前流对象 int available()%20 %20 %20 %20 %20 %20 %20 %20 %20 返回当前流中可用的字节数%20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20  void mark (int readlimit)%20在流中作标记 boolean markSupported ()%20 判断流是否支持标记和复位操作%20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 void reset()%20 %20 返回流中标记过的位置 long skip(long n)%20 %20 跳过流中的指定字数OutputStream类的主要方法:void write(int b) 向流中写入一个字节数据void write (byte[] b) 写入数组buf的所有字节void write (byte[] b,int off,int len) 将字节数组中off位置开始,长度为len的字节数据输出到输出流中void close () 关闭当前流对象 void flush () 强制缓冲区中的所有数据写入到流中 2.字符流常用方法Reader常用方法:int%20read()从输入流中读取单个字符,返回读取的字符int%20read(byte[]%20c)%20从输入流中读取c.length长度的字符,保存到字符数组c中,返回实际读取的字符数read(char[]%20c,int%20off,int%20len)%20从输入流中读取最多len的长度字符,保存到字符数组c中,保存的位置从off位置开始,返回实际读取的字符长度void%20close()%20关闭流Writer常用方法:write(String%20str)将str字符串里的字符输出到指定输出流中write(String%20str,int%20off,int%20len)%20将str字符串里从off位置开始长度为len的字符输出到输出流中void%20close()%20关闭输出流void%20flush()%20刷新输出流四.IO流的使用需要在AndroidMainfset.xml文件中进行权限的配置:1.SDCard中创建与删除文件权限:<uses-permission%20android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>2.SDCard写入数据权限<uses-permission%20android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>代码如下:<?xml%20version="1.0"%20encoding="utf-8"?><manifest%20xmlns:android="http://schemas.android.com/apk/res/android"%20%20%20%20%20%20%20%20%20%20package="com.example.cxy.io">%20%20%20%20<uses-permission%20android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"></uses-permission>%20%20%20%20<uses-permission%20android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>%20%20%20%20<application%20%20%20%20%20%20%20%20android:allowBackup="true"%20%20%20%20%20%20%20%20android:icon="@mipmap/ic_launcher"%20%20%20%20%20%20%20%20android:label="@string/app_name"%20%20%20%20%20%20%20%20android:supportsRtl="true"%20%20%20%20%20%20%20%20android:theme="@style/APPTheme">%20%20%20%20%20%20%20%20<activity%20android:name=".MainActivity">%20%20%20%20%20%20%20%20%20%20%20%20<intent-filter>%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20<action%20android:name="android.intent.action.MAIN"/>%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20<category%20android:name="android.intent.category.LAUNCHER"/>%20%20%20%20%20%20%20%20%20%20%20%20</intent-filter>%20%20%20%20%20%20%20%20</activity>%20%20%20%20</application></manifest>字节文件的输入输出流ileInputStream 和 FileOutputStream(InputStream 和 OutputStream的子类,具体实现类)

FileInputStream 和 FileOutputStream分别是InputStream 和 OutputStream的子类,往往使用FileInputStream 和 FileOutputStream这两个子类去就可以从一个指定文件中读取或者向某一个文件中写入数据。

如果创建FileInputStream 和 FileOutputStream对象,那我们必须指定 文件的路径和文件名,对象被创建之后,流就打开了,程序结尾处必须结束流的操作。关闭流,释放资源。

package%20com.example.cxy.io;import%20android.os.Bundle;import%20android.support.v7.app.AppCompatActivity;import%20android.view.View;import%20android.widget.Button;import%20android.widget.Toast;import%20java.io.File;import%20java.io.FileInputStream;import%20java.io.FileNotFoundException;import%20java.io.FileOutputStream;import%20java.io.IOException;public%20class%20MainActivity%20extends%20AppCompatActivity%20implements%20View.OnClickListener{%20%20%20%20PRivate%20Button%20btn,btn1;%20%20%20%20private%20String%20content="今天天气不错";%20%20%20%20@Override%20%20%20%20protected%20void%20onCreate(Bundle%20savedInstanceState)%20{%20%20%20%20%20%20%20%20super.onCreate(savedInstanceState);%20%20%20%20%20%20%20%20setContentView(R.layout.activity_main);%20%20%20%20%20%20%20%20inintView();%20%20%20%20}%20%20%20%20private%20void%20inintView()%20{%20%20%20%20%20%20%20%20btn=%20(Button)%20findViewById(R.id.button);%20%20%20%20%20%20%20%20btn1=%20(Button)%20findViewById(R.id.button2);%20%20%20%20%20%20%20%20btn.setOnClickListener(this);%20%20%20%20%20%20%20%20btn1.setOnClickListener(this);%20%20%20%20}%20%20%20%20@Override%20%20%20%20public%20void%20onClick(View%20v)%20{%20%20%20%20%20%20%20%20File%20file%20=new%20File("/mnt/sdcard/cxy.txt");%20%20%20%20%20%20%20%20switch%20(v.getId())%20{%20%20%20%20%20%20%20%20%20%20%20%20case%20R.id.button:%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20{%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20file.createNewFile();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//实例化一个输出流%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20FileOutputStream%20out=new%20FileOutputStream(file);%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//FileOutputStream%20out=new%20FileOutputStream("/mnt/sdcard/cxy.txt");%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//把文字转化为字节数组%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20byte[]%20bytes%20=%20content.getBytes();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//写入字节数组到文件%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20out.write(bytes);%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//关闭输入流%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20out.close();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Toast.makeText(MainActivity.this,%20"写入成功",%20Toast.LENGTH_SHORT).show();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20}%20catch%20(IOException%20e)%20{%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e.printStackTrace();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20}%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break;%20%20%20%20%20%20%20%20%20%20%20%20case%20R.id.button2:%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20{%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20String%20text=null;%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//实例化一个输入流%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20FileInputStream%20input=new%20FileInputStream(file);%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//把文件中的所有内容转换为byte字节数组%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20byte[]%20bytes%20=%20new%20byte[input.available()];%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//读取内容%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20input.read(bytes);%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//关闭输入流%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20input.close();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//bytes字节数组转化为文字%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text=new%20String(bytes);%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Toast.makeText(MainActivity.this,text,%20Toast.LENGTH_SHORT).show();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20}%20catch%20(FileNotFoundException%20e)%20{%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e.printStackTrace();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20}%20catch%20(IOException%20e)%20{%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e.printStackTrace();%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20}%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break;%20%20%20%20%20%20%20%20}%20%20%20%20}}<?xml%20version="1.0"%20encoding="utf-8"?><RelativeLayout%20%20%20%20xmlns:android="http://schemas.android.com/apk/res/android"%20%20%20%20xmlns:tools="http://schemas.android.com/tools"%20%20%20%20android:layout_width="match_parent"%20%20%20%20android:layout_height="match_parent"%20%20%20%20tools:context="com.example.cxy.io.MainActivity">%20%20%20%20<Button%20%20%20%20%20%20%20%20android:layout_width="wrap_content"%20%20%20%20%20%20%20%20android:layout_height="wrap_content"%20%20%20%20%20%20%20%20android:text="写入"%20%20%20%20%20%20%20%20android:id="@+id/button"%20%20%20%20%20%20%20%20android:layout_alignParentTop="true"%20%20%20%20%20%20%20%20android:layout_centerHorizontal="true"%20%20%20%20%20%20%20%20android:layout_marginTop="55dp"/>%20%20%20%20<Button%20%20%20%20%20%20%20%20android:layout_width="wrap_content"%20%20%20%20%20%20%20%20android:layout_height="wrap_content"%20%20%20%20%20%20%20%20android:text="输出"%20%20%20%20%20%20%20%20android:id="@+id/button2"%20%20%20%20%20%20%20%20android:layout_below="@+id/button"%20%20%20%20%20%20%20%20android:layout_centerHorizontal="true"%20%20%20%20%20%20%20%20android:layout_marginTop="157dp"/></RelativeLayout>


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表