Java中的I/O

Java中所有的输入输出类都与四个抽象类有关,分别是:

  • InputStream字节输入流
  • OutputStream字节输出流
  • Reader字符输入流
  • Writer字符输出流

InputStream类(该类中的所有方法遇到错误时都会引发IOException异常):

  • read():从输入流中读取数据的下一个字节。返回0~255之间的int字节值。如果到达末尾,则返回-1
  • read(byte[] b):从输入流中读入一定长度的字节,并以整数形式返回字节数
  • mark(int readlimit):在输入流的当前位置放置一个标记,readlimit参数代表能够读取的最大字节数
  • reset():将输入指针返回到当前所做的标记处
  • skip(long n):跳过输入流上的n个字节并返回实际跳过的字节数
  • markSupported():如果当前流支持mark()/reset()操作就返回True
  • close方法:关闭输入流并释放与该流相关联的所有系统资源

OutputStream类(类中的所有方法均返回void,遇到错误引发IOException异常):

  • write(int b):将指定字节写入此输出流
  • write(byte[] b):将b个字节从指定的byte数组写入此输出流
  • write(byte[] b,int off,int len):将指定byte数组中从偏移量off开始的len个字节写入此输出流
  • flush():彻底完成输出并清空缓存区
  • close():关闭输出流、

File类:

创建文件对象:

                  File file = new File(String pathname)根据路径创建文件对象

                  File file = new FIle(String parent,String child)根据父路径和子路径(包含文件名) 创建File对象

                  File file = new FIle(File f,String child)根据parent抽象路径名和child路径名字符串创建FIle对象

创建文件:file.createNewFile();

删除文件:file.delete();

File类常用方法
方法 返回值 说明
getName() String 获取文件的名称
canRead() boolean 判断文件是否可读
canWrite() boolean 判断文件是否可写
exits() boolean 判断文件是否存在
length() long 获取文件的长度
getAbsolutePath() String 返回文件的绝对路径
getPerent() String 获取文件的父路径
isFile() boolean

判断文件是否存在

isDirectory() boolean 判断文件是否是一个目录
isHidden() boolean 判断文件是否是隐藏文件
lastModified() long 获取文件最后修改时间

文件输入/输出流FileInputStream/FileOutputStream

FileInputStream类常用的构造方法:

  • FileInputStream(String name):创建一个文件名为name的FileInputStream对象
  • FileInputStream(File file)使用File对象创建一个FIleInputStream对象,可以在文件连接输入流之前对文件作进一步操作

FIleWrite与FileReader类:按字符读取、写入数据。

BufferedInputStream与BufferedOutputStream类:对InputStream和OutputStream进行带缓存区的包装

BufferedInputStream:

  • BufferedInputStream(InputStream in)创建一个带32字节的缓存流
  • BufferedInputStream(InputStream in,int size)按照指定大小创建缓存区

BufferedOutputStream:(有一个flush()方法来将缓存区的所有数据强制输出完

  • BufferedOutputStrea(OutputStream ou)
  • BufferedOutputStream(OutputStream ou,int size)

与之对应的BufferedReader与BufferedWriter:

BufferedReader.readLine()方法是阻塞式的,如果到达流末尾,就返回null。如若未按照下面方式进行读取内容,则可能发生漏读的情况(while(new BufferedReader().readLine() != -1)或while(new BufferedReader().readLine() != null))

String str = null;
while((str = new BufferedReader().readLine()) != null){
    //System.output.println(str);/、此时的str为保存的一行字符串,不会少字符
}

注:

  • readLine()是读取到没有数据时就返回null,readlLne()是一个阻塞函数,当没有数据进行读取的时候,就会一直阻塞在那,而不是返回null。readLine()只有在数据流发生异常或者另一端被close()时,才会返回null值
  • 如果不指定buffer的大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到“/r”、"/n"、"/r /n"才会返回

未完待续。。。。

猜你喜欢

转载自blog.csdn.net/andanwubian/article/details/81366991