Java输入输出处理

Java I/O概述

  • 通过不同输入输出设备间的数据传输抽象为流。
  • 运行在内存中的应用程序,如果想从一些地方来获得数据例如文件,则可以使用上述来源创建输入流,并从其中读取数据。
  • 同理,内存中的应用程序可以通过输出流把数据输出到指定的目的地,包括显示器,文件等。其中输出到显示器为标准输出。
  • 流的内容是二进制序列的称为字节流或二进制流。
  • 流的内容是字符的称为字符流
  • 有关类在java.io和java.nio包中。
  • I/O流类可以分为字节流和字符流,字节流可分为InputStream和OutputStream,字符流可以分为Reader和Writer。
  • 上述四个类都是I/O的核心类都是抽象类。
  • 无论是访问本地的输入输出设备还是其他计算机上的资源,都需要使用Java I/O类。

字节流

  • 所有的字节输入流都继承InputStream抽象类
  • 所有的字节输出流都继承outputStream抽象类
InputStream的read()方法

public abstract int read() throws IOException

  • 该方法从来源输入流中读取数据的下一个字节到Java程序中
  • 该方法返回值是从0到255的int类型的值
  • 如没有可用的字节,则已经达到输入流的末尾,则返回-1
  • 该方法调用时只读取一个字节,因此往往放在while之后的条件判断中,例如:while((len=inputstream.read())!=-1)
  • 批量读取字节的read方法:
    public int read(byte[ ] b) throws IOException
  • 该方法从来源输入流中读取一定数量的字节数,并存到数组b中,返回值为实际读取的一定数量的字节数。Java会尽可能读取的字节数时b的长度,但有时也可能会少于。
  • 如没有可用的字节,则已经达到输入流的末尾,则返回-1
    public int read(byte[ ] b,int off,int len) throws IOException
  • off是存储到数组b中时元素下标的偏移量,len是要读取的字节数
outputStream的write()方法

public void write(int b);//输出流中写入一个字节b
void write(byte b[ ]);//输出流中写入一个字节数组b
void write(byte b[ ],int off,int len);//把数组b中下标off开始,长度为len的字节写入到输出流
public void flush()//刷空输出流并输出所有被缓存的字节
public void close();//关闭输出流,如果不关可能会产生异常,为确保此方法会被调用一般放在finally语句块中调用。

字符流

  • ASCll以一个字节表示一个字符,Unicode编码用两个字节表示一个字符在这里插入图片描述
    在这里插入图片描述
Reader类

Reader类提供了多个从字符输入流的方法:

  • public int read();//该方法读取一个字符,范围在0和65535之间的int值。如果达到输入流的末尾,则返回-1.
  • public int read(char[ ] cbuf);//该方法与InputStream的read()方法类似,只不过是char数组。
  • public int read(char [ ]cbuf,int off,int len);//读取len个存到数组从off开始的位置中。
  • Reader作为抽象类,有多个非抽象的子类,其中最常用的包括FileReader、BufferedReader等
  • FileReader类从InputStreamReader类继承而来,该类按字符读取流中数据
  • FileReader类并未包含从文件中读取一行的方法,BufferedReader类却可以。public String readLine() throws IOException该方法读取一个文本行。通过下列字符之一即可认为某行已经终止:换行(’\n)、回车(’\r’)或回车后直接跟换行。方法返回包含该行内容的字符串,不包含任何终止符,若到流末尾则返回null.
  • 若想按行读取纯文本,把FileReader、BufferedReader两个类结合使用
  • 因此BufferedReader提供了下列构造方法public BufferedReader(Reader in)
  • 该构造方法创建一个默认大小输入缓冲区的缓冲字符输入流,因此可以通过如下代码来结合使用上述两个类:
BuffferedReader br=new BufferedReader(new FileReader("d.txt")) ;
  • 上述多个类结合的方式在Java输入输出中很常见,这种方式是设计模式中的装饰模式
  • 上述代码中,对创建得到的FileReader对象使用BufferedReader对象进行了装饰和增强,从而可以对已有的FileReader对象来调用readLine这个FileReader类没有定义的方法。
  • 装饰设计模式的特点是,装饰类与被装饰类都必须属同一个接口或父类。
Writer类

public void write(String str);
void write(byte b[ ]);
void write(String str,int off,int len);
public void flush();
public void close();

文件处理

File类是java.io包中唯一代表磁盘文件的对象,File类定义了一些与平台无关的方法,通过调用File类的各种方法能够实现创建、删除、重命名文件等操作。File类不仅可以代表文件也可以代表文件夹
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值