您的位置:首页 > 编程语言 > Java开发

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

2017-11-12 14:02 525 查看
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 l
4000
en = 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)返回的是毫秒数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息