android学习札记第7章之IO流二
上一节介绍了File类的用法,它可以获取文件对象的信息,这一节将会介绍如何对File对象进行操作,并且深入毽爸程风介绍IO流中几种类的用法,IO流总体包括两大类,字节流和字符流,可以直接接文件的流是FileInputStream/FileOutputStream和ByteArrayInputStream/ByteArrayOutputStream,而可以对字节流进行包装并缓冲加快读写效率的流有很多,不仅下面介绍的这些,还可以根据API,还可以根据eclipse中的快捷键,从IO流父类中可知所有的IO包装流,根据需求供我们使用。①用到的快捷键:Ctrl+O:查找方法 Ctrl+T:类的树状结构 Ctrl+Shift+T:查找类 Alt+Shift+M:提取数据成一个方法②对文件进行操作(双向):既能读又能写,还可以移动下标,不属于IO流,可以对File进行操作。③Stream流(单向):把字节的读写,抽象成字节在管道中流动。分为输入流和输出流。 输入流(read):流入内存,如:读取U盘中的数据。;输出流(write):流出内存,如:打印Word文档中的数据。③高级流、操作流: 与其他流相接,提供特定的数据处理功能,操作其他流的流。
工具/原料
JDK、eclipse、android SDK、ADT
一、java.io.RandomAccessFile
1、RandomAccessFile(双向:既能读又能写,还可以移动下标,不属于IO流,可以对File进行操作)①读写文件中的字节数据,用下标读写文件中的指定位置的字节值。②创建对象:RandomAccessFile raf=new RandomAccessFile(路径字符串或File对象,"rw");//不存在直接新建空文件
2、方法: write(int b):写入int型的水瑞侮瑜b,输出int转为“十六进制”中四个字节的末尾1个栓疠瑕愤字节。(强转成byte) write(byte[] buffer):输出数组中全部的字节值。 write(byte[] buffer,int from,int num):输出数组中的从from开始的num个字节值。 read():读取一个字节值,然后前补三个0字节,变成int类型,读取结束返回-1。 read(byte[] buffer): 根据指定数组长度,读取一批字节值,并放入指定的数组buffer中,并返回放入数组的字节数量, 当读取结束返回-1。 seek(int i):将指针移动到指定位置。 getFilePointer():获得当前所在的位置的下标。 writeInt(int i):输出int类型的4个字节值 writeDouble(double d):输出int类型的8个字节值 writeUTF(String s):先输出2个字节值,表示字符串的字节长度,再输出字符串的字节值。 readInt():读取4个字节值转成int readDouble():读取8个字节值转成int readUTF(): 先读取2个字节值,来确定字符串的字节长度,再读取这些字节值,转成String。读取结束再读取会 出现EOF读取结束异常。
3、练习:对文件进行加密、解密。
二、java.io.FileInputStream/FileOutputStream
1、①父类:java.io.OutputStream/InputStream(抽象类)②子类:java.io.FileInputStream/FileOutputStream(直接与文件相接,读写文件中的数据。不可定位指针的位置,只能顺序读写。)③创建对象: FileOutputStream out=new FileOutputStream(文件或字符串);//不论文件是否存在,都会新建空文件。 FileOutputStream out=new FileOutputStream(文件或字符串,true);//不存在,会新建空文件;则存在直接追加数据。
2、方法: 拥有抽象类OutputStream/InputStream的方法。①OutputStream: write(int b):写入int型的b,输出int转为“十六进制”中四个字节的末尾1个字节。(强转成byte)。 write(byte[]):输出数组中全部的字节值。 write(byte[],int from,int num):输出数组中的从from开始的num个字节值。 flush():刷出缓存,缓存满了自动刷出,不满需要手动刷出。 ②InputStream: read():单字节读取。 read(byte[]):多字节读取。 available():获取剩余的可读取字节量。
3、练习:将原文件复制成目标文件。
三、java.io.BufferedInputStream/BufferedOutputStream
1、①提供内存缓冲区数组,提高“单字节”读写效率,缓存需要flush刷出,刷出后离开缓冲区。 ②创建对象: BufferedInputStream bis=new BufferedInputStream(new FileInputStream(from));//内部数组默认长度:8192字节。 BufferedInputStream bis=new BufferedInputStream(new FileInputStream(from),16*1024);//内部数组长度:16K。
2、练习:将原文件复制成目标文件。
四、java.io.DataInputStream/DataOutputStream
1、①读写固定字节格式的数据。 ②创建对象: DataOutputStream out=new DataOutputStream(想接的流);。
2、方法: ①DataOutputStream: 罕铞泱殳 writeInt(int i):输出int类型的4个字节值。艘早祓胂 writeDouble(double d):输出int类型的8个字节值。 writeUTF(String s):先输出2个字节值,表示字符串的字节长度,再输出字符串的字节值。 ②DataInputStream: readInt(int i):读取4个字节值转成int。 readDouble(double d):读取8个字节值转成int。 readUTF(String s): 先读取2个字节值,来确定字符串的字节长度,再读取这些字节值,转成String。读取结 束再读取会出现EOF读取结束异常。