IO流基础使用

I/O是Input / Output的缩写,用于处理设备之间的数据传输

输入 (Input):读取外部数据到程序中。
输出(Output):将程序输出到外部设备中。

流的分类

1.、按数据单位分:字节流(8bit),字符流(16bit)
2、按流向分:输入流、输出流
3、按角色分:节点流,处理流

四个抽象基类
(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
流的体系结构
抽象基类字节流(文件流)缓冲流(处理流的一种)
InputStream FileInputStreamBufteredInputStream
OutputStreamFileOutputStreamBufteredOutputStream
ReaderFileReaderBufferedReader
WriterFileWriterButteredWriter

FileReader和FileWriter的使用(字符流)

FileReader读入数据

例:将day下的hello.txt文件读入到程序中,并输出到控制台

步骤

①实例化File类的对象,指明要操作的文件。

File file = new File ("hello.txt");

②提供FileReader的对象,并指明操作的文件,用于数据的写入。

FileReader fr = new FileReader(file);

③数据的读入
//read():返回读入的一个字符。如果达到文件未尾,还回-1。(每次读入一个字节)

int date= fr.read();     //date是最后一个字符对应的数值

while(date!=-1){
    System.out. println( (char)date);
    date=fr.read();
}

④流的关闭操作。

fr.close();

异常的处理:
为了保证流资源一定可以执行关闭操作。需使用try-catch-finally处理,并将关闭操作放入finally中。

注意:读入的文件必须存在,否则会报FileNotFoundException。

对③操作的升级

char [] cbuf =new char[5];    //每次读入5个字符
// read (char[] cbuf):返回每次读入到cbuf数组中字符的个数,如果达到末尾,返回-1

int len;    //记录每次读入到cbuf数组中的字符个数

while ((len = fr.read (cbuf))!=-1){
    for (int i=o; i < len; i++){
            System.out. print(cbuf[ij);
    }
}


FileFWriter写出数据

步骤

①提供File类的对象,指明写出到的文件。

File file = new File ("hellol. txt");

②提供FileWriter的对象,并指明操作的文件,用于数据的写出。

FileWriter fw = new FileWriter (file);

③.写出的操作

fw.write("hello");
fW.write("world");

④资源的关闭

fw.close();

说明:

1、输出操作:对应的File可以不存在,不会报异常。
2、File对应的硬盘中文件不存在,在输出时,会自动创建此文件存在:
①如果使用的构造器为:FileWriter (file) / FileWriter (file,false)会对原有的文件进行覆盖。
②如果使用的是FileWriter (file,true):不会覆盖原有文件,会在原内容的基础上进行添加。
 


使用FileReader和FileWriter实现文本文件的复制

步骤:

1、创建File类的对象,指明读入和写出的文件。

File srcFil e= new File ("hellol.txt");     //读入程序中的文件

File destFile = new File ("hello2.txt");     //程序内容写出到的文件

2、创建输入流和输出流的对象。

FileReader fr = new FileReader (scrFile);    //输入流

FileWriter fw = new FileWriter(destFile);    //输出流

3、数据的读入和写出。

char [] cbuf = new char[5];

int len;     //记录每次读入到cbuf数组中的字符个数

while ((len=fr.read((buf))!=-1){     //每次写出len个字符
    fw.write (cbuf,0,len);
}

4、关闭。

fw.close();
fr. close();

注:字符流不能处理图片文件

FileInputStream和FileOutputStream的使用(字节流)

步骤:

1、1、创建File类的对象,指明读入和写出的文件。

File srcFil e= new File ("hellol.txt");     //读入程序中的文件

File destFile = new File ("hello2.txt");     //程序内容写出到的文件

2、创建输入流和输出流的对象。

FileInputStream fis = new FileInputStream (scrFile);    //输入流

FileOutputStream fos = new FileOutputStream (destFile);    //输出流

3、数据的读入和写出。

byte [] butter = new byte[5];

int len;

while ((len=fis.read(buffer))!=-1){     //读入
    fos.write(butter, o,len);     //写出
}

4、关闭。

fis.close();
fos. close();


可写为使一个通用的方法
指定路径下文件的复制,将要复制的路径和将要复制到的路径改为变量的形式,然后方法的形参和变量名相同。

小结:

1、对于文本文件(.txt,java,.C .CPp),使用字符流处理。
2、对于非文本文件(jpg,mp3,mp4, avi,doc,ppt)用字节流处理。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值