黑马程序员_javaIO流概述

------- android培训、java培训、期待与您交流! ----------

一.IO流概述

(1)

IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流
流按流向分为:输入流,输出流。

(2)

IO流常用基类
字节流的抽象基类
InputStream,OutputStream
字符流的抽象基类
Reader,Writer
这四个类派生出的子类名称都是以其父类名作为子类名的后缀。

二.字符流

1.FileWrite

数据的最常见体现形式是文件
FileWriter是专门用于操作文件的Writer子类对象,无空参的构造函数,因为该对象一杯初始化就必须要明确被操作的文件。也米有特有的方法,只有继承来的共性方法。
FileWriter(String fileName)

(1)创建一个文件并且输入一定内容
第一步,创建存储文件
FileWritier fw=new FileWriter("")//此处需要对IO异常进行处理,可以抛也可以try。创建一个文件并且该文件会被创建在指定的目录下。如果该目录下已有同名文件将会被覆盖。该步就是要明确数据要存储的位置。
第二步,调用Writer的写入方法,将字符串写入到流中
fw.write("");//该方法也会抛出内存异常
第三步,刷新流对象中缓冲的数据,并将该数据刷入到目标文件中。
fw.flush();//同样会抛出异常,另外fw.close()也可以刷新流,但是会关闭流资源,不能再对流进行操作从而不能再写入数据。只能出现不再使用该流的时候用来释放资源。

完整代码如下

FileWriter fw = null;//外部建立写入流引用,因为如果词语写在try语句中,在finally语句中则无法访问到该对象。
try{
  fw = new FileWriter("Test.txt");//创建流与写入方法时会抛出异常进行异常处理
  fw.write("text");
}
catch (IOException e){
  System.out.println(e.toString());
}
finally{
  If(fw!=null)//此处必须进行判断以防止流创建时格式不对创建不成功,方法找不到调用的对象
    try{
      fw.close();//同样也会抛出异常进行处理
    }
    catch (IOException e){
      System.out.println(e.toString());
    }
}

(2)续写一个文件

FileWriter(String fileName,boolean append);通过构造函数创建流,当append为true时,不覆盖已有文件,并在已有文件的末尾处进行数据的续写。其他过程与上步骤一致。

2.FileReader

该流读取数据有两种方式,一是单个字符去读,一是以字符数组为单位去读取

(1)

第一步;FileReader fr=new FileReader("");//创建一个文件读取刘对象,和指定名称的文件相关联,而且要保证该文是已经存在的,如果不存在会发生异常FileNotFoundException是IOException的子类。
第二步;fr.read();返回一个int型对象字符的int表示,需要强制转换成Char类型,一次只读取一个字符,而且再读的时候会读取下一个。当已达到流的末尾时,会返回-1。返回时int型不是byte型是因为当碰巧取到111111111时也是-1就可能造成程序停止,所以提升成int型,有多个字节存储一个字节,在前面补00000000111111111

完整代码如下

FileReader fr = null;
try{
  fr = new FileReader("c:\\test.txt");
  int ch=0;
  while((ch=fr.read())!=-1){
    System.out.prinln("ch="+(Char)ch);
  }
}
catch (IOException e){
  System.out.println("read-Exception :"+e.toString());
}
finally{
  if(fr!=null){
    try{
      fr.close();
    }
    catch (IOException e){
      System.out.println("close-Exception :"+e.toString());
    }  }}

(2)

以字符数组为单位读取,与上部分代码没有太大区别,数据的容器变了而已

代码如下

FileReader fr = null;
try{
    fr = new FileReader("c:\\test.txt");
    char[] buf = new char[1024];//通常数组长度定义为1024的整数倍。
    int len= 0;
    while((len=fr.read(buf))!=-1){
        System.out.println(new String(buf,0,len));//当最后一行未能占满数组内容时,读取数组中的一部分。
    }
}
catch (IOException e){
    System.out.println("read-Exception :"+e.toString());
}
finally{
    if(fr!=null){
        try{
            fr.close();
        }
        catch (IOException e){
            System.out.println("close-Exception :"+e.toString());
    }    }}                          

3.缓冲区技术

(1)BufferedWriter
字符流的缓冲区
不同于之前读一次写一次,提高了对数据读写的效率
缓冲区要结合流才可以使用,在流的基础上对功能进行了增强。
BufferedWriter(Writer out);构造函数中传入写入流作为实际参数,所以在创建缓冲区之前必须要先有流对象,此构造方法创建一个默认大小的缓冲字符写入流。

第一步创建一个写入流
FileWriter fw=new FileWriter("");
第二步加入缓冲技术
BufferedWriter bufw=new BufferedWriter(fw);
第三步调用BufferedWriter的写入方法
bufw.write("");//因为缓冲区BufferedWriter是FileWriter的子类,所以可以使用从父类中继承的方法。记住只要用到缓冲区,就要记得刷新缓冲流,
bufw.flush();
bufw.close();//此处关闭缓冲区其实也就是关闭缓冲中流对象,所以不用在fw.close();

newLine()换行,缓冲区中的特有方法将换行动作进行了封装,是跨平台的换行方法。在写入的时候使用、

(2)BufferReader

BufferedReader(Reader r);构造函数中传入读取流作为实际参数。

第一步创建读取流对象与目标文件相关联
FileReader fr=new FileReader("");
第二步创建缓冲区,将字符读取流对象作为实际参数换递给缓冲对象
BufferedReader bufr =new BufferReader(fr);
第三步,对文本数据进行读取
String line=null;//缓冲区提供了一次读取一行的方法readLine(),方便文本数据的获取,此处用来读取返回的字符串类型数据,当没有数据的时候返回null,可以用来当做判断条件停止读取动作
while((line=bufr.readLine())!=null){
System.ou.println(line);//返回的数据不包含终止符,所以需要手动换行。
}
bufr.close();//同样缓冲区读取对象的关闭也是关闭读取流。

三.字节流

操作与字符流一样,只不过字符流有码表对应字符操作文本,而字节流没有码表。

InputStream读取,OutputStream写入
FileOutputStream fos=new FileOutputStream("");
fos.write("".getBytes());//字节流没有指定缓冲区的时候是没有缓冲的,不像字符流需要缓冲字节查表转换保存然后再刷新。但是依然需要关闭资源
fos.close();

读取操作依然是有上面两种方式。但是还有一种特有的读取方式
通过available()方法返回可读取的全部字节数,然后指定对应大小的数组,一次读取然后输出,不用再通过事先指定数组的长度用循环的方式读取。
byte []buf=new byte[fis.available()]//但是只建议在数据大小较小时使用,如果过大可能会造成内存溢出的情况。
fis.read(buf);

四.其他常用流对象

1.读取转换流提高了效率。
字节流转换成字符流的桥梁
InputStreamReader(InputStream in)
第一步获取键盘录入对象
InputStream in=System.in;
第二步将获取的字节流转换成字符流对象,使用转换流
InputStreamReader isr=new InputStreamReader(in);
第三步为了提高效率,加入字符流缓冲区计数
BufferReader bufr=new BufferReader(isr);
String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();

2.写入转换流
字符流转换成字节流的桥梁
OutputStreamWriter(OutputStream out)

3.标准输入输出流
System类中的字段:in,out。
它们各代表了系统标准的输入和输出设备。
默认输入设备是键盘,输出设备是显示器。
System.in的类型是InputStream.
System.out的类型是PrintStream是
OutputStream的子类FilterOutputStream 的子类。

示例:

获取键盘录入数据,然后将数据流向显示器,那么显示器就是目
的地。
通过System类的setIn,setOut方法对默认设备进行改变。
 System.setIn(new FileInputStream(“1.txt”));//将源改成文件1.txt。
System.setOut(new FileOutputStream(“2.txt”));//将目的改成文件2.txt
因为是字节流处理的是文本数据,可以转换成字符流,操作更方便。
BfferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(System.out));

4.流操作规律
通过两个明确来完成
第一明确源和目的。
第二明确操作数据类型。
第三明确要使用哪个具体的对象。

时间: 2024-10-24 07:36:16

黑马程序员_javaIO流概述的相关文章

黑马程序员——IO流概述、字符流、字节流、流操作规律(一)

第一节     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都在IO包中. 4)流按其操作数据的类型分为两种:字节流和字符流. 5)流按其流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象基流:InputStream和OutputStream 2)字符流的抽象基流:Reader和Writer 注:此四个

黑马程序员_IO流1

异常1.异常的继承体系: java.lang.Throwable类,所有异常和错误的父类 Error类所有错误的父类 Exception类所有异常的父类 RuntimeException NullPointerException ClassCastException IndexOutOfBoundsException 错误,比较严重的问题,一旦出现了错误,程序根本不能运行,必须修改源代码. 异常,比较轻微的问题,一旦出现了异常,程序可以处理掉异常,继续运行.异常一般是程序的最后一个问题. 2.T

黑马程序员_IO流2

File类 1.File类 不属于流对象.作用:将机器上的路径和目录封装成一个File对象,提供了很多的方法和成员变量,让我们操作目录和路径   目录就是文件夹.路径,指由文件夹组成的到达文件夹的通道. 2.File类的静态成员变量   一共提供的4个变量,掌握的只有2个,跨平台 static String separator  结果\ Windows目录分隔符  Linux下 / static String pathSeparator 结果 ; Windows下的路径与路径之间的分隔符 Lin

黑马程序员——打印流小结

//打印流 /* 1.字节打印流,他可以获取的参数有: 1.File对象 2.字符串 3.字节输出流,可以实现自动刷新 2.字符打印流,他可以获取的参数有: 1.File对象 2.字符串 3.字节输出流,可以实现自动刷新 4.字符输出流,可以实现自动刷新 */ import java.io.*; import java.io.PrintWriter; import java.io.BufferedReader; public class Print{ public static void mai

黑马程序员 IO流 文件的分割与合并

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ----------------------package cn.itcast.IO; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;

黑马程序员——IO流总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 什么是IO流? IO流是用来处理设备之间的数据传输 有哪些流? 流按操作数据的种类分为:字符流和字节流 流按流的方向分:输入流和输出流 字节流的基类:InputStream和OutputStream 字符流的基类:Writer和Reader 常用写字符流:FileWriter,BufferedWriter,OutputStreamWriter,PrinterWriter 常用读字符流  : F

黑马程序员——IO流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- IO流 IO流概述 IO流用来处理设备之间的数据传输.Java对数据的操作是通过流的方式.Java用于操作流的对象都在IO包中. 流按照流向分为两种:输入流和输出流. 输入流和输出流相对于内存设备而言.将外设中的数据读取到内存中:输入.将内存的数写入到外设中:输出. 流按照操作数据分为两种:字节流和字符流. 字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字.再对这个文字

黑马程序员-IO流其他流与File类

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 1:其他的流 1: DataOutputStream ;多了一些操作基本数据类型的功能 DataInputStream:读取文件. 用DataOutputStream流写进去的数据,就用DataInputStream流来读取. 1 imp

黑马程序员—01-c语言概述

------- android培训.java培训.期待与您交流! ---------- 一.      计算机和软件常识 1.       计算机运行原理 1)          硬件基本组成:硬盘.内存.CPU 2.       计算机只能识别0和1 1)          0和1组成的指令 2)          0和1组成的数据 3.       计算机和软件的联系 1)          软件的基本概念:指令的集合 2)          软件的安装运行过程 u   安装在硬盘 u