Java之IO流

一:IO流体系结构:
这里写图片描述
IO流总结
一、IO流的体系结构:

二、字节流、转换流、字符流的使用与选择:

  • 字节流主要用于文件的复制

    2.1.1 InputStream抽象父类:方法见上图
    |–FileInputStream子类
    OutputStream抽象父类:方法见上图
    |–FileOutputStream子类
    2.1.2多级文件夹的复制代码实现:

 public static void main(String[] args) throws IOException {
   //源文件夹
   File srcDir = new File("aaa");
   //目标文件夹
   File destDir = new File("bbb");  
   //定义一个方法  复制文件夹的方法  
   copyDir(srcDir, destDir);
   }
   /*
    *  复制文件夹的方法    
    *     方法的返回值类型   void
    *     方法的参数列表  源文件夹srcDir  目标文件夹destDir
    */
   public static void copyDir(File srcDir,File destDir) throws IOException{
   //验证 目标文件夹不存在 创建
   if(!destDir.exists()){
   destDir.mkdir();
   }
   //是否是文件夹
   if(!srcDir.isDirectory() || !destDir.isDirectory() ){
   System.out.println("录入的文件夹有误!!");
   return;
   }
   //获取 源文件夹 下 所有的子文件及子文件夹
   File[] files = srcDir.listFiles();

   //遍历 得到每一个file对象   有文件也有文件夹   
   for (File file : files) {
    //判断file 是否是 文件
   if(file.isFile()){//是文件
   //下面要做文件的复制
   //file是源文件
   File srcFile = file;
   //创建一个 目标文件对象
   File destFile = new File(destDir,file.getName());   
   //完成 文件的复制
   copyFile(srcFile, destFile);
   }
   if(file.isDirectory()){//是文件夹  
   File dest = new File(destDir,file.getName());
   dest.mkdir();
   copyDir(file, dest);
   }
   }   
   }  
   /*
    * 完成文件复制的方法
    */
   public static void copyFile(File srcFile,File destFile) throws IOException{

      //创建字节输入流 关联源文件
  FileInputStream fis = new FileInputStream(srcFile);
   FileOutputStream fos = new FileOutputStream(destFile);
   byte[] buffer = new byte[1024];
   int len;   
   while((len=fis.read(buffer))!=-1){
   fos.write(buffer, 0, len);
   }
   fos.close();
   fis.close();
   }

2.2- 字符转换流用于在字节流和字符流编码不同,或者是读写的时候的编码不同时,进行转换。
2.2.1 字符转换流:

  • |–InputStreamReader

    • |–FileReade

    |–OutputStreamWriter
    - |–FileWriter

    2.2.2字符转换流的使用:
    构造方法:InputStreamReader(InputStream in,String charset);
    是字节通向指定字符的桥梁,将字节读取到字节输入流中然后按照指定的编码格式进行转换,读取。
    方法:int read()读取 单个字符;int read(byte[] b,int 0,int len)读byte[]数组的一部分
    OutputStreamWriter
    构造方法:OutputStreamWriter(OutputStream out,String charset);
    是字符通向字节的桥梁,将字符用字节输出流,按照指定的编码格式转换后写到中指定文件
    2.2.3 转换流读取文件代码实现:
    /*
    *有两个文本文件,分别为a.txt和b.txt,其中a.txt编码方式是gbk,而b.txt的编码方式是utf8。

    1. 要求将使用转换流实现如下功能: 将a.txt和b.txt文件的内容复制到c.txt文件中,保证内容不乱码。
      */
public static void main(String[] args) throws Exception {
InputStreamReader isr = new InputStreamReader(new FileInputStream("test.txt"),"GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("test2.txt"),"UTF-8");
int len;
while((len=isr.read())!=-1){
osw.write(len);
}
osw.close();
isr.close();}
  1. 字符流用于读写文本文件,且用BufferedXxx更加方便。

2.3.1字符流的读取一般使用高效流,即它对应的包装类BufferedXxxx
2.3.2 BufferedReader和BufferedWriter
构造方法:BufferedReader(new FileReader(“path”));
方法:String readLine();一次读取一行;close()
构造方法:BufferedWriter(new FileWriter(“path”));
方法:void write();一次写一个字符;void write(char[] c,int 0,int len) ;一次写一个char数组的一部分; void newLine();换行,不用考虑系统的换行
2.3.3代码的实现:

三、序列化
3.1序列化和反序列化的作用:
序列化的作用:将对象的状态写到指定的文件中去
反序列化的作用:将对象从文件中读出来
3.2序列化和反序列化:
3.1.1首先一个类需要实现Serializable接口,才能进行序列化和反序列化。其次实现序列化后该类不可改动,若改动则会导致版本信息不匹配引发异常。所以一般会直接指定序列化的UID常量。
3.1.2如果有的属性并不想被序列化,不想被包含在对象中被写到文件中去,则使用transient关键字修饰。
3.3序列化和反序列化的使用:
序列化:
构造方法:ObjectInputStream(InputStream in)创建指定存储序列化对象文件的输入流对象
成员方法:Object readObject()从指定文件中读取对象数据
反序列化:
构造方法:ObjectOutputStream(OutputStreamt out)创建指定存储序列化对象文件的输入流对象
成员方法:void Object writeObject()从指定文件中读取对象数据
3.3示例代码:
序列化:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("p3.person"));
Object obj = ois.readObject();
System.out.println(obj);

反序列化:

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("p3.person"));  
     //创建一个Person对象
     Person p = new Person("范冰冰", 36);
     oos.writeObject(p);
     oos.close();

四、打印流PrintWriter
基本用法和IO流一样只是只能输出到文件或者是Console窗口

五、comons-io工具包的使用

readFileToString(File file):读取文件内容,并返回一个String
writeStringToFile(File fileString content):将内容content写入到file
copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制,会复制全部的文件夹,包括最外层的一起复制到目标文件夹中
copyFile(File srcFile, File destFile): 文件复制
copyDirectory(File srcDir,File destDir) :只会复制源文件夹中的内容到目标文件夹,不会复制源文件夹
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值