java基础5:io流对象之字节输入输出流
1,OutputStream
|——OutputStream
|——FileOutputStream
/* 流对象,操作文件的时候, 自己不做,依赖操作系统,所以流是操作系统的
* FileOutputStream
* 写入数据文件,学习父类方法,使用子类对象
*
* 子类中的构造方法: 作用:绑定输出的输出目的
* 参数:
* File 封装文件
* String 字符串的文件名
*
* 流对象使用步骤
* 1. 创建流子类的对象,绑定数据目的
* 2. 调用流对象的方法write写
* 3. close释放资源
*
* 流对象的构造方法,可以创建文件,如果文件存在,直接覆盖
*/
write(int b)方法
FileOutputStream fos = new FileOutputstream("e:\\a.txt");
fos.write(100);
fos.close();
此时记事本显示的是100对应的ascii码b,若要显示100,程序中应写
fos.write(49);
fos.write(48);
fos.write(48);
write(btye[] bytes)方法
btye[] bytes ={49,48,48};对应100
byte[] bytes ={-34,-23};对应一个中文
write(btye[] bytes,int start,int len)方法
两个参数分别是开始写入的索引和写入的个数
直接写入字符串
不可以直接传入字符串,需转化为字节数组
fos.write("hello".getBytes()); //对应的是new String(bytes);将字节转化为字符串
文件的续写
续写: FileOutputStream构造方法, 的第二个参数中,加入true
FileOutputStream fos = new FileOutputStream(file,true);
换行
在文件中,写入换行,符号换行 \r\n
\r\n 可以写在上一行的末尾, 也可以写在下一行的开头
* 在文件中,写入换行,符号换行 \r\n
fos.write("hello\r\n".getBytes());
2,FileInputStream
/*
* 字节输入流
* java.io.InputStream 所有字节输入流的超类
* 作用: 读取任意文件,每次只读取1个字节
* 读取的方法 read
* int read() 读取1个字节
* int read(byte[] b) 读取一定量的字节,存储到数组中
*/
FileInputStream
*
* 构造方法: 为这个流对象绑定数据源
*
* 参数:
* File 类型对象
* String 对象
* 输入流读取文件的步骤
* 1. 创建字节输入流的子类对象
* 2. 调用读取方法read读取
* 3. 关闭资源
*
* read()方法,
* read()执行一次,就会自动读取下一个字节
* 返回值,返回的是读取到的字节, 读取到结尾返回-1
*/
读取文件(字节)
FileInputStream fis = new FileInputStream("c:\\a.txt");
//读取一个字节,调用方法read 返回int
//使用循环方式,读取文件, 循环结束的条件 read()方法返回-1
int len = 0;//接受read方法的返回值
while((len=fis.read())!=-1){
System.out.println(len); //输出ascii码
System.out.print((char)len); //输出原文
}
读取文件(数组)
/*
* FileInputStream读取文件
* 读取方法 int read(byte[] b) 读取字节数组
* 数组作用: 缓冲的作用, 提高效率
* read返回的int,表示什么含义 读取到多少个有效的字节数
*/
FileInputStream fis = new FileInputStream("c:\\a.txt");
//创建字节数组
byte[] b = new byte[1024];
int len = 0 ;
while( (len = fis.read(b)) !=-1){
System.out.print(new String(b,0,len));
}
fis.close();
原理图:可以看出若上文中直接System.out.print(b);则会输出abcded
复制文件(读一个字节写一个字节)
FileInputStream fis = new FileInputStream(e:\\a.txt);
FileOutputStream fos = new FileOutputStream(g:\\b.txt);
int len = 0;
while((len=fis.read())!=-1){
fos.write(len);
}
复制文件(使用字节数组缓冲区提高效率)
FileInputStream fis = new FileInputStream(e:\\a.txt);
FileOutputStream fos = new FileOutputStream(g:\\b.txt);
int len = 0;
byte[] b = new byte[1024];
while((len=fis.read(b))!=-1){
fos.write(b,0,len);
}
在没超出文件大小情况下,数组越大,速度越快,测速可用long s = System.currentTimeMillis();
System.out.println(s1-s2)返回的是毫秒数