java基础5:io流对象之字节输入输出流

来源:互联网 发布:淘宝魔方店哪个好 编辑:程序博客网 时间:2024/04/29 23:13

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)返回的是毫秒数