随机流
Java提供了专门用来处理文件输入输出功能更完善的RandomAccessFile类,该类比较特别,既可以输入又可以输出
也就是可以作为源也可以作为目的地
构造方法
RandomAccessFile(String name ,String mode)
//name用来确定创建的源或目的地,mode只取r(只读)或rw(可读/写)
RandomAccessFile(File file, String mode)
//file是指文件对象
RandomAccessFile类中比较关键的方法就是seek(long a)
,用来定位RandomAccessFile流的读写位置,a是指读写位置距离文件开头的字节个数
(一个int类型的数据占4个字节)
RandomAccessFile类的常用方法(未完待续)
方法 | 描述 |
---|---|
close( ) | 关闭文件 |
getFilePointer( ) | 获取当前的读写的位置 |
length( ) | 获取文件的长度 |
read( ) | 从文件中读取一个字节的数据 |
readBoolean( ) | 从文件中读取一个布尔值0代表false,其他值代表true |
readByte( ) | 文件中读取一个字节 |
readChar( ) | 从文件中读取一个字符 |
readDouble( ) | 从文件中读取一个双精度浮点值(8个字节) |
readInt( ) | 从文件中读取一个单精度浮点值(4个字节) |
readFully(byte b[ ]) | 读b.length字节放入数组b,完全填满该数组 |
将int型数据写入到一个文档中,然后倒序进行读出的例子
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class Example12_9 {
public static void main(String[] args) throws IOException {
File myFile = new File("C:\\Users\\Administrator\\Desktop","abc.txt");
try{
RandomAccessFile randomAccessFile = new RandomAccessFile(myFile,"rw");
int date[] = {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < date.length; i++) {
randomAccessFile.writeInt(date[i]);
}
for (int i = date.length - 1; i >= 0 ; i--) {
randomAccessFile.seek(i*4); //一个int类型占4个字节,从数组的尾部开始读起
System.out.printf(","+randomAccessFile.readInt());
}
randomAccessFile.close(); //最后记得关闭
}
catch (Exception E){
}
}
}
运行结果
D:\HelloWorld\out\production\HelloJava Chapter_12.Part_6.Example12_9
,10,9,8,7,6,5,4,3,2,1
进程已结束,退出代码 0
数组流
流的源和目标除了可以是文件外,还可以计算机内存
字节数组流
ByteArrayInputStream流的构造方法
ByteArrayInputStream(Byte[ ] buf)
//buf指定的数组的全部字节单元ByteArrayInputStream(byte[ ] ,int offset ,int length)
//offset是指从数组的offset处按顺序取出length字节单元
调用方法
public int read()
//按顺序地从源中读取一个字节,该方法返回读取的字节值public int read(byte[ ] b ,int off ,int len)
//从源中读取len指定的字节数,并将指定的字节数从off位置存放到数组b中
ByteArrayOutputStream流的构造方法
ByteArrayOutputStream()
//缓冲区默认大小32字节,大于时会自动增加ByteArrayOutputStream(int size)
//size指定缓冲区的大小
调用方法
public void write(int b)
//public void write(byte[ ] b,int off , int len)
//从参数b中指定的len字节顺序地写入缓冲区,off指定从b中写出的字节的起始位置public byte [ ] toByteArray()
//返回输出流写入缓冲区的所有字节
字符数组流
CharArrayReader类
charArrayWriter类
向内存写入数据或读取数据的例子
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
public class Example12_11 {
public static void main(String[] args){
try{
//字节数组流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//创建一个字节数组输出流对象
byte b [] = "how are you".getBytes(); //byte数组b
byteArrayOutputStream.write(b);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); //获取输出的所有字节
byte backByte[] = new byte[byteArrayOutputStream.toByteArray().length] ; //设置输出时的长度
byteArrayInputStream.read(backByte); //将要输入的存放到一个数组中
System.out.println(new String(backByte)); //将字节数组进行输出
//字符数组流
CharArrayWriter charArrayWriter = new CharArrayWriter();
char c [] = "i am fine".toCharArray();//创建字符数组
charArrayWriter.write(c); //将字符数组写入到内存中
CharArrayReader charArrayReader = new CharArrayReader(charArrayWriter.toCharArray());//源是刚刚写入的字符数组
char backChar[] = new char[charArrayWriter.toCharArray().length];
charArrayReader.read(backChar);
System.out.println(new String(backChar)); //
}
catch (Exception e){
}
}
}
运行结果
D:\HelloWorld\out\production\HelloJava Chapter_12.Part_7.Example12_11
how are you
i am fine
CET4P175
improvement
remote
provide
rub
fiction
occurrence
adopt
navigation
adventure
float
转载:https://blog.csdn.net/ouqianbei/article/details/106118939
查看评论