Java的输入输出系统

Java提供了专用于输入输出功能的包java.io,其中包含了5个非常重要的类,所有与输入输出有关的类都继承了这5个类

  • 文件流 FileInputStream  FileOutputStream
  • 字节流 InputStream  OutputStream
  • 字符流 Reader  Writer
  • 过滤流  FilterInputStream   FilterOutputStream
  • 基本流 System.out   System.in

按所读写的数据类型分为两类:

  • 字节流类(Byte Streams):字节流类用于向字节流读写8位二进制的字节。一般地,字节流类主要用于读写诸如图像或声音等的二进制数据
  • 字符流类(Character Streams):字符流类用于向字符流读写16位二进制字符

InputStream

  • 类中包含了一套所有输入流都需要的方法,可以完成最基本的从输入流读取数据的功能
  • 当java程序需要从外设中读入数据时,先创建一个适当类型的输入流类对象来完成与外设的连接,然后再调用执行该新建对象的特定方法,实现对应外设的操作。

InputStream子类对象继承InputStream类的如下方法

  • read()方法、定位指针的方法、close()方法
  • public int read()
           每次执行时都从输入流的当前位置读入一个字节的二进制数据,读数作为低字节,高字节用零填满,合成一个16位整型量返回,若输入流当前位置无数据返回-1
  • 使用完毕后,应用close()方法关闭流

InputStream常用子类

  • FileInputStream

             用于从文件File中将诸如图像数据之类的原始字节的数据流读出

  • ByteInputStream

             此类实现了一个输入流,从一个byte数组中读出数据

  • ObjectInputStream

            实现对象的持久存储,从OutputStream读入java对象的基本数据类型和图形

<span style="font-size:12px;">//使用FileInputStream从文件中读取字节流
//未考虑异常处理
import java.io.*;
public class TestFileInputStream {
  public static void main(String[] args) throws Exception{
    int b = 0;
    long num = 0;
    FileInputStream in = new FileInputStream("c://source.txt");//或"c:/source.txt"
      while((b=in.read())!=-1){//一次读一个字节,判断是否读到文件结尾
        System.out.print((char)b); 
        num++;
      }
      in.close();  
      System.out.println("\n共读取了 "+num+" 个字节");                              
    }
  }</span>

OutPutStream

当java程序需要向某外设输出数据时,先要创建一个输出流类对象,通过该对象实现与外设的连接,再利用OutputStream类提供的方法将数据写入该外设中

OutputStream类是一个抽象类,不能直接创建OutputStream类对象,而应该创建它的某个子类的对象。

子类的继承方法有:

  • Write()方法、flush()方法和close()方法
  • public void write(int c);    将参数c对应的字符写入输出流
  • public void write(char array[]);   将字符数组array中全部字符顺序写入输出流
  • 使用完毕后,应用close()方法关闭流

OutputStream常用子类

  • FileOutputStream

          用于将诸如图像数据之类的原始字节的数据流写入File

  • ByteArrayOutputStream

          此类实现了一个输出流,数据被写入一个byte数组

  • ObjectOutputStream

          实现对象的持久储存,将java对象的基本数据类型和图形写入OutputStream

  • PipedOutputStream

          将管道输出流连接到管道输入流来创建通信管道

<span style="font-size:12px;">//以字节流方式,将一个文件中的信息复制到另一个文件
//读入:程序<-FileInputStream<-文件(信息源)
//写出:程序->FileOutputStream->文件(信息去向)
//未考虑异常处理
import java.io.*;
public class TestFileCopy_Stream {
  public static void main(String[] args)throws Exception {
	  int b = 0;
	  FileInputStream in = null;
	  FileOutputStream out = null;

	  //数据源,用于向程序中读取信息
	  in = new FileInputStream("e://source.txt");
	  //目标文件,程序将信息写到此文件中,会自动创建文件
	  out = new FileOutputStream("e://dest.txt");
	  while((b=in.read())!=-1){//一次读一个字节,判断是否读到文件结尾
	      out.write(b);//一次写一个字节
	  }
	  in.close(); 
	  out.close();

	  System.out.println("文件已复制");
  }
}</span>

Reader

  • 用来以字符方式从流中读入数据。Reader类中包含了一套所有字符输入流都需要的方法,可以完成最基本的从字符输入流读取数据的功能
  • Reader类是一个抽象类,所以实际应用中创建的对象是Reader某个子类的对象,通过该子类对象与外接数据源连接
  • 子类必须实现的方法只有
  •   int read(char[] b,int offset,int length);
  •   void close();
  • 当输入流使用完毕后,可以调用该方法将其关闭,断开java程序与外接数据源的联系,释放此连接所占用的系统资源

Reader类常用子类

  • BufferedReader

           从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取

           可以指定缓冲区的大小

  • InputStreamReader

           字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符

                   每次调用InputStreamReader的read()方法都会导致从底层输入流读取一个或多个字节

  • FileReader

            用来读取字符文件的类

            用于读取字符流

Writer

  • 用来以字符方式从流中写入数据。Writer类中包含了一套所有字符输出流都需要的方法,可以完成最基本的向字符输出流写入数据的功能
  • Writer类是一个抽象类,所以实际应用中创建的对象是Writer某个子类的对象,通过该子类对象与外接数据源连接
    子类必须实现的方法只有
  • void write(char[] b,int offset,int length);
  • void close();
  • void flush();//强制清空缓冲区
  • 当输出流使用完毕后,关闭输出流,断开java程序与外接数据源的连接,释放此连接所占用的系统资源


Writer类常用子类

  • BufferedWriterStream

          将文本写入字符输出流,缓冲各个字符

          可以指定缓冲区的大小

  • OutputStreamWriter

          字符流通向字节流的桥梁:它使用指定的charset将要写入流中的字符编码为字节

          每次调用write()方法都会导致在给定字符(或字符集)上调用编码转换器

  • FileWriter

          用来写入字符文件的类

          文件是否可用或是否可以被创建取决于底层平台

  • PrintWriter

          向文本输出流打印对象的格式化表示形式

<span style="font-size:12px;">//输入字符串、浮点数、整数在屏幕上显示输入结果
//输入流的套接使用,   
//System.in -> InputStreamReader -> BufferedReader
import  java.io.*;
public  class standardIO3{
    public static void main(String[] args) throws IOException{
        //使用System.in创建InputStreamReader类对象ii
        InputStreamReader iin=new InputStreamReader(System.in);
        //创建BufferedReader类对象bin,并关联到iin
        BufferedReader bin=new BufferedReader(iin);
        
        //或者合并写成如下
        //BufferedReader stdin= new BufferedReader( new InputStreamReader(System.in));

        String  s;
        float   f;
        int i=0;

        System.out.println("输入任一字符串");
        s=bin.readLine();
        System.out.println("输入浮点数");
        f=Float.parseFloat(bin.readLine());
        System.out.println("输入整数");
        i=Integer.parseInt(bin.readLine());
        
        System.out.println("输入的字符串:"+s);
        System.out.println("输入的浮点数:"+f);
        System.out.println("输入的整数:"+i);
    }
} </span>


文件处理

File

  • File(String pathname)

          通过将给定路径名字符串转换为抽象路径名来创建一个新File实例

  • exists()

           测试此抽象路径名表示的文件或目录是否存在

  • canRead()

           测试应用程序是否可以读取此抽象路径名表示的文件

  • listFiles()

           返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件

  • mkdir()

           创建此抽象路径名指定的目录

使用BufferWriter类的方法:

  1. 为文件建立FileWriter对象
  2. 再为该FileWriter对象建立BufferWriter类对象
  3. 写入操作将使用所建立的BufferWriter类对象

向磁盘文件写入各类数据

  1. java通过DataInputStream & DataOutputStream类实现各类数据的读写。向文件写入各种类型数据的具体步骤是:
  2. 为磁盘文件建立File对象
  3. 为File对象建立FileOutputStream类流对象,建立其与磁盘文件的连接
  4. 为FileOutputStream类流对象建立DataOutputStream类对象
  5. 利用DataOutputStream类的writeInt(),writeFloat(),writeDouble(),writeBoolean()等方法,分别向文件中写入整型、单精度型、双精度型、布尔型等数据
  6. 写入操作完成后,利用close()方法将流关闭,断开与磁盘文件的联系


基本流

java系统预先定义好3个流对象,分别表示标准输入设备、标准输出设备和标准错误设备。

  • System.in : 用于程序的输入; 对应外设为键盘
  • System.out : 用于一般输出; 对应外设为屏幕
  • System.err : 用于显示出错信息; 对应外设为屏幕

System类的所有属性都是静态static的,调用时以类名System为前缀。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值