Java 输入输出流巩固学习

Java输入与输出
File类:
File创建的三种方法:
1)new File(filename);//参数是String类型
2)new File(path,filename);//参数是String类型
2)new File(file,filename);//file是File类型的,filename是String类型

流:
输入输出流一般分为字节输入流、字节输出流、字符输入流和字符输出流4种。

字节类:InputStream(所有字节输入流的父类)、OutputSteam(所有字节输出流的父类),都是相应输入流或者输出流的抽象类。
字节流是以字节为单位来处理数据的,由于字节流不会对数据做任何转换,因此用来处理二进制的数据。
FileInputStream类是InputStream的子类,实现了文件的读取,是文件字节输入流。该类所有的方法都是从InputStream继承并重写的。
文件字节输入流创建方法有两种:
1)new FileInputStream(filepath);//参数是String类型
2)new FileInputStream(file);//参数是File类型的实例对象
FileOutputStream类是OutputStream的子类,实现了文件的写入,是文件字节输出流。该类所有的方法都是从OutputStream继承并重写的。
文件字节输出流创建方法有两种:
1)new FileOutputStream(filepath);//参数是String类型
2)new FileOutputStream(file);//参数是File类型的实例对象,在file后加true会在原有内容后追加,不加true会将原内容覆盖。

字符类: Reader、 Writer
字符流用于处理字符数据的读取和写入,以字符为单位。  Reader、 Writer是字符流的抽象类。它们定义了字符流数据的读取和写入的方法,各个子类依其特点实现或者覆盖这些方法。

InputStreamReader类是字节流到字符流的桥梁。它可以根据指定的编码方式,将字节输入流转换为字符输入流。
1)new InputStreamReader( in)//in为InputStream的实例对象
2)new InputStreamReader(in,cname)//in为InputStream  实例对象,cname为String  类型的指定的编码方式
OutputStreamReader类是字节流到字符流的桥梁。写出字节,根据指定的编码方式,将字节输出流转换为字符输出流。
1)new OutputStreamWriter( out)//out为OutputStream的实例对象
2)new OutputStreamWriter(out,cname)//out为OutputStream 实例对象,cname为String  类型的指定的编码方式,中文常用GBK、GBK2312,西文UTF-8等。

FileReader类是Reader类的子类,它实现了从文件中读出字符数据,是文件字符输入流。根据其构造方法创建实例方法有两种:
1)new FileReader(filepath);//参数为String类型
2)new FileReader(file);//参数为File类型的实例对象
FileWriter类s Writer类的子类,实现了将字符数据写入文件中,是文件自负输出流。 根据其构造方法创建实例方法有两种:
1)new FileWriter(filepath);//参数为String类型
2)new FileWriter(file);//参数为File类型的实例对象

BufferReader类是Reader类的子类,使用该类可以以行为单位读取数据。创建BufferReader对象方法为:
new BufferReader(in);//in为Reader类型
BufferWriter类是Reader类的子类,使用该类可以以行为单位读写入数据。创建BufferWriter对象方法为:
new BufferWriter(out);//out为Writer类型

PrintStream是打印输出流,可直接输出各种类型的数据。创建PrintStream对象的语法为:
new PrintStream(out);//out为OutputStream类型
PrintWriter是打印输出流,该流把Java语言的内构类型义字符表示形式传送到相应的输出流中,可以以文本的形式浏览。创建打印输出流的语法为:
new PrintWriter(out);//out为OutputStream或者Writer类型

System.in获取用户输入,System类是final类,该类不能被继承,也不能创建System类的实例对象。
in是静态变量,类型是InputStream。
Java不直接支持键盘输入,实现键盘输入要先new InputStreamReader的实例(InputStreamReader isr=new InputStreamReader(System.in)),再new一个BufferReader的实例(BufferReader br=new BufferReader(isr)),通过br.readLine()方法读取键盘输入。

RandomAccessFile类
使用该类可以读取任意位置数据的文件。这个类既不是输入流的子类也不是输出流的子类。常用的构造方法有两种,创建语法为:
1)new RandomAccessFile(name,mode);//name为与系统相关的文件名,mode用来决定创建的流对文件的访问权利,可以为:r(只读)  rw(可读写)  rws(同步写入) rwd(将更新同步写入)
2)new RandomAccessFile(file,mode);//file为File类的对象

过滤流器FilterStream
为某种目的过滤字节或者字符的数据流。DataInputStream和DataOutStream类分别是FilterInputStream和FilterOutputStream类的子类。他们分别实现了DataInput和DataOutput接口,该接口定义了独立于具体及其的带格式的读写操作,从而实现对java文件的不同基本类型数据的读写。
常见的过滤器有:
1)BufferReader :用来对流的数据加以处理再输出
2)LineNumberReader :是一种缓冲流,可用来记录读入的行数。创建该过滤器的常用方法为:int getLineNumber()
3)PrintWriter :用阿里将输出导入某种设备。

对象序列化(objectcserialization)
ObjectInput接口和ObjectOutput接口分别继承了ataInput和DataOutput接口,提供了对基本数据类型和对象序列化 的方法。使用对象序列化功能可以方便的将对象写入输出流或者从输入流读取对象。
1)readObject():反序列化就是从输入流中获取序列化的对象数据,用这些数据生成新的Java对象。该方法定义在ObjectInput接口中,由ObjectInputStream类实现。
Object obj=readObject();//obj:Java对象,使用readObject()方法读取的序列化对象是Object类型的,必须强制类型转换才能使用。
2)WriteObject():序列化就是将对象写入输出流,这个输出流可以是文件输出流,网络输出流以及其他数据输出流。该方法定义在ObjectOutput接口中,由ObjectoutputStream类实现。
writeObject(obj);//obj:Java对象,被序列化的对象必须实现java.io.Serializable接口,否则不能实现序列化。

ObjectInputStream与ObjectOutputStream类
这两个类读取和保存对象,分别是对象输入流和对象输出流,分别是InputStream和OutputStream的子类。
new ObjectInputStream(in);//in是InputStream类型的实例对象
new ObjectOutputStream(out);//out是OutputStream类型的实例对象

Scanner类:该类是java.util包中的类。该类用了实现用户的输入,是一种只要有控制台就能实现输入操作的类。
new Scanner(in);//in是System.in,为InputStream类型
new Scanner(file);//file是File类型

通过控制台输入,首先要创建一个Scanner对象,然后用创建的对象调用next()或者nextLine()方法读取输入。



猜你喜欢

转载自blog.csdn.net/qq_534019165/article/details/50866538