Java 核心五个类(File、Outputstream、Inputstream、Reader、Writer)一个接口(Serializable)

 
java BIO(阻塞式IO)    java.io
核心五个类(File、Outputstream、Inputstream、Reader、Writer)一个接口(Serializable)
 
1.File文件操作类*****
  java.IO包中,File类是唯一一个与文件本身操作(删除,创建,取得信息)有关,与文件内容无关的程序类。
 
  1.1 File类(即可描述一个真实文件,也可是一个文件夹)的基本使用
    File类的两种实例化方式:
     
 public File (String pathname)传绝对路径
 public File (String parent ,String child)
    创建新文件
     
 public boolean createNewFile()throws IOException
    判断文件是否存在
      
public boolean exists()
    删除文件
     
 public boolean delete()
 
    路径分隔符:File.separator
 
  1.2 目录操作
    1.2.1取得父路径与父FIle对象
      
public String getParent()
public File getParentFile()
 
    1.2.2 创建目录(无论有多少级父目录,都会一次创建)
     
 public boolean mkdirs()
 
  1.3 取得文件信息
  判断File对象是否是文件
   
 public boolean isFile()
   判断File对象是否是路径
    
public boolean isDirectory()
   取得文件大小
   
 public long length()
   取得最后修改日期
    
public long lastModified()
   列举一个目录的全部组成:
   
 public File[ ] listFiles()
   IO相关处理属于阻塞式耗时操作,一般放在子线程中进行
 
2.字节流与字符流
  流的分类:
  字节流(byte):
  InputStream、OutputStream
 
  字符流(char):
  Reader、writer
 
  字节流与字符流区别:
  字节流是原生操作,字符流是处理后的操作。
 
  一般使用字节流(无论是网络传输还是磁盘数据保存均以字节为单位),
  只有处理中文文本时才会用到字符流。
 
  2.1 流的操作流程
  无论是字节流还是字符流,操作流程几乎一样,以文件操作为例:
  a,取得File对象
  b,取得file对象的输入,输出流
  c,进行数据的读取或写入
  d,关闭流(close)
 
  IO操作属于资源处理,所有资源处理(IO 数据库, 网络)使用后都必须关闭。
 
  2.2 字节输出流(OutputStream)
  
public abstract class OutputStream implements Closeable,Flushable
   Closeable: public void close ()throws IOException
  Flushable: public void flush ()throws IOException
 
  输出方法:
  1,将指定的字节数组全部输出
  
public void write (byte[] b)throws IOException;
 
  2,将部分字节数组输出
  
public void write (byte[] b, int offset,int len) throws IOExcepton;
 
  3,输出单个字节
  
public abstract void write (int b)throws IOException;
 
 
  要进行文件内容的输出:使用FileOutputStream子类
  文件内容覆盖
  
public FileOutputStream(File file)throws FileNotFoundException
  文件内容追加
  
public FileOutputStream(File file,boolean append)
 
  当使用FileOutputStream进行文件内容输出时,只要文件的父路径存在,FileOutputStream会自动创建文件。
 
    2.2.2AutoCloseable自动关闭支持 -JDK1.7
    使用自动关闭接口有一个前提,需要结合try-catch块
 
    2.3 字节输入流(InputStream)
    输入方法read:
    
public int read(byte[] b) throws IOException
    读取数据到字节数组b中
 
    返回值三种情况:
    I.返回b的长度:
    当读取的数据大小大于字节数组大小,返回字节数组大小
 
    II.返回大于零的数 但是小于b长度:
    读取数据大小小于字节数组大小,返回真正读取个数
 
    III.返回-1:
    数据读取完毕
 
    
public int read () throws IOException
    读取单个字节
 
  2.4 字符流
   字符输出流(Writer)
  除了参数为字符数组外,多了一个传入String对象的方法
  public void write (String str)throws IOException
 
  字符输入流(Reader)
  Reader类中没有方法可以直接读取字符串,只能通过字符数组读取。
 
  2.5 字节流与字符流
  从实际开发来讲,字节流优先考虑,只有处理中文时才考虑使用字符流
  所有字符流操作,无论是写入还是输出,数据都先保存在缓存中。
 
  2.6 转换流:将字节流->字符流
   用于将底层的字节流转换为字符流供子类使用
 
  OutputStreamWriter:字节输出流->字符输出流
  InputStreamReader:字节输入流->字符输入流
 
  3.字符编码
    3.1 GBK、GB2312:国标编码。GBK即包含简体中文也包含繁体中文,而GB2312只包含简体中文
 
    3.2UNICODE:java提供的16进制编码,可以描述世界上任意的文字,由于采用16进制编码,导致编码的体积太大,造成网络传输负担
 
    3.3 ISO-8859-1:浏览器默认编码,国际通用编码,不支持中文
 
    3.4 UTF编码(UTF-8):相当于结合了ISO-8859-1和UNICODE编码,支持所有语言且体积较小。
 
乱码产生原因(95%):编解码不一致
 
  4.内存流
  除了文件之外,IO操作也可以发生在内存中,发生在内存中的操作称为内存流,
 
  内存流也分为两类:
 
  字节内存流:
  ByteArrayInputStream、ByteArrayOutputStream
 
  字符内存流
  CharArrayReader、CharArrayWriter
 
  
public ByteArrayOutputStream()
  public ByteArrayInputStream(byte buf[ ])
 
  5.打印流(输出流进化版)
  系统提供的两个打印流
 
  PrintStream: 字节打印流
  PrintWriter: 字符打印流
 
  打印流应用的是装饰设计模式:核心依然是某个类(OutputStream)的功能(write()),但是为了得到更好的操作效果,让其支持的功能更多。
 
  优点:扩展功能特别方便,需要不同的功能时只需要更换装饰类即可。
  缺点:类结构复杂。
 
  6.System 对IO的支持
  输出:(均是打印流PrintStream的对象)
  -标准输出(显示器)
System.out
-错误输出()
System,err
 
 
输入:
-标准输入(键盘)
System.in
 
原文地址:https://www.cnblogs.com/yishengPan/p/10558762.html