java语言中定义的字节输出流_Java——字节(输入/输出)流,字符(输入/输出)流...

一、字节输出流

OutputStream抽象类

此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。

字节: 这样流每次只操作文件中的1个字节

流对象:操作文件的时候,自己不做依赖操作系统

作用:从Java程序,写入文件(可以写任意文件)

方法:

write(int b) 写入1个字节

write(byte[] b) 写入字节数组

write(byte[] b,int,int)写入字节数组,int 开始写入的索引, int 写几个

close() 方法,关闭流对象,释放与此流相关的资源

FileOutputStream类

OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。

FileOutputStream类,即文件输出流,是用于将数据写入File的输出流。

流对象使用步骤:

1. 创建流子类的对象,绑定数据目的

2. 调用流对象的方法write写

3. close释放资源

1、写入文件

public static void main(String[] args)throws IOException {

//流对象的构造方法,可以创建文件,如果文件存在,直接覆盖

FileOutputStream fos = new FileOutputStream("c:\\a.txt");

//流对象的方法write写数据

//写1个字节,查询编码表

fos.write(97);

//写字节数组

byte[] bytes = {65,66,67,68};

fos.write(bytes);

//写字节数组的一部分,开始索引,写几个

fos.write(bytes, 1, 2);

//写入字节数组的简便方式

//写字符串

fos.write("hello".getBytes());

//关闭资源

fos.close();

}

2、IO流的异常处理

import java.io.FileOutputStream;

import java.io.IOException;

/*

* IO流的异常处理

* try catch finally

*

* 细节:

* 1. 保证流对象变量,作用域足够

* 2. catch里面,怎么处理异常

* 输出异常的信息,目的看到哪里出现了问题

* 停下程序,从新尝试

* 3. 如果流对象建立失败了,需要关闭资源吗

* new 对象的时候,失败了,没有占用系统资源

* 释放资源的时候,对流对象判断null

* 变量不是null,对象建立成功,需要关闭资源

*/

public class FileOutputStreamDemo3 {

public static void main(String[] args) {

//try 外面声明变量,try 里面建立对象

FileOutputStream fos = null;

try{

fos = new FileOutputStream("s:\\a.txt");

fos.write(100);

}catch(IOException ex){

System.out.println(ex);

throw new RuntimeException("文件写入失败,重试");

}finally{

try{

if(fos!=null)

fos.close();

}catch(IOException ex){

throw new RuntimeException("关闭资源失败");

}

}

}

}

3、字符串转成byte数组

"hello,world!".getBytes()

4、文件续写

FileOutputStream fos = new FileOutputStream(file, true);

二、字节输入流

InputStream抽象类

通过InputStream可以实现。InputStream此抽象类,是表示字节输入流的所有类的超类。,定义了字节输入流的基本共性功能方法。

int read():读取一个字节并返回,没有字节返回-1.

int read(byte[]):读取一定量的字节数,并存储到字节数组中,返回读取到的字节数,没有字节返回-1.。

FileInputStream类

输入流读取文件的步骤

1. 创建字节输入流的子类对象

2. 调用读取方法read读取

3. 关闭资源

read()方法,

read()执行一次,就会自动读取下一个字节

返回值,返回的是读取到的字节, 读取到结尾返回-1

1、读取单个字节

public static void main(String[] args) throws IOException{

FileInputStream fis = new FileInputStream("c:\\a.txt");

//读取一个字节,调用方法read 返回int

//使用循环方式,读取文件, 循环结束的条件 read()方法返回-1

int len = 0;//接受read方法的返回值

while( (len = fis.read()) != -1){  // 返回值保存到len中

System.out.print((char)len);

}

//关闭资源

fis.close();

}

2、读取一个字节数组

public static void main(String[] args) throws IOException {

FileInputStream fis = new FileInputStream("c:\\a.txt");

//创建字节数组

byte[] b = new byte[1024];

int len = 0 ;

while( (len = fis.read(b)) !=-1){  // 保存到字节数组b中

System.out.print(new String(b,0,len));

}

fis.close();

}

Copy文件

public static void main(String[] args) {

long s = System.currentTimeMillis();

FileInputStream fis = null;

FileOutputStream fos = null;

try{

fis = new FileInputStream("c:\\t.zip");

fos = new FileOutputStream("d:\\t.zip");

//定义字节数组,缓冲

byte[] bytes = new byte[1024*10];

//读取数组,写入数组

int len = 0 ;

while((len = fis.read(bytes))!=-1){

fos.write(bytes, 0, len);

}

}catch(IOException ex){

System.out.println(ex);

throw new RuntimeException("文件复制失败");

}finally{

try{

if(fos!=null)

fos.close();

}catch(IOException ex){

throw new RuntimeException("释放资源失败");

}finally{

try{

if(fis!=null)

fis.close();

}catch(IOException ex){

throw new RuntimeException("释放资源失败");

}

}

}

long e = System.currentTimeMillis();

System.out.println(e-s);

}

三、字符输入/输出流

1、字符输入——FileReader类

字符输入流只能读取文本文件,所有字符输入流的超类为java.io.Reader类

int read() 读取1个字符

int read(char[] c) 读取字符数组

public static void main(String[] args) throws IOException{

FileReader fr = new FileReader("c:\\1.txt");

// 读取单个字符

/*int len = 0 ;

while((len = fr.read())!=-1){

System.out.print((char)len);

}*/

//字符数组

char[] ch = new char[1024];

int len = 0 ;

while((len = fr.read(ch))!=-1){

System.out.print(new String(ch,0,len));

}

fr.close();

}

2、字符输出流——FileWriter

所有字符输出流的超类为java.io.Writer

write(int c) 写1个字符

write(char[] c)写字符数组

write(char[] c,int,int)字符数组一部分,开始索引,写几个

write(String s) 写入字符串

public static void main(String[] args) throws IOException{

FileWriter fw = new FileWriter("c:\\1.txt");

//写1个字符

fw.write(100);

fw.flush();

//写1个字符数组

char[] c = {'a','b','c','d','e'};

fw.write(c);

fw.flush();

//写字符数组一部分

fw.write(c, 2, 2);

fw.flush();

//写入字符串

fw.write("hello");

fw.flush();

fw.close();

}

Copy文件

public static void main(String[] args) {

FileReader fr = null;

FileWriter fw = null;

try{

fr = new FileReader("c:\\1.txt");

fw = new FileWriter("d:\\1.txt");

char[] cbuf = new char[1024];

int len = 0 ;

while(( len = fr.read(cbuf))!=-1){

fw.write(cbuf, 0, len);

fw.flush();

}

}catch(IOException ex){

System.out.println(ex);

throw new RuntimeException("复制失败");

}finally{

try{

if(fw!=null)

fw.close();

}catch(IOException ex){

throw new RuntimeException("释放资源失败");

}finally{

try{

if(fr!=null)

fr.close();

}catch(IOException ex){

throw new RuntimeException("释放资源失败");

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值