JAVASE学习笔记:第十一章 数据流

本文深入探讨了Java中的文件操作与流处理,包括File类的基本使用、流的概念及分类、字节流与字符流的应用、压缩输出流、过滤流、对象流等核心知识点,并通过实例展示了如何读取、复制、转换文件。此外,还提供了实践作业以加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、File类,所在包java.io
                File f=new File("E:\\工具\\FeiQ\\1.txt");//创建文件三种方式
  File f1=new File("E:\\工具\\FeiQ\\","1.txt");
  File f2=new File("E:\\工具\\FeiQ");
  File f3=new File("F:\\t1\\t2\\t3");
    
  boolean b=f.isFile();//判断是否文件
  System.out.println(b);
  boolean b1=f2.isDirectory();//判断是否目录
  System.out.println(b1);
  long l=f1.length();  //求文件长度,单位:字节
  System.out.println(l);
  long l1=f1.lastModified();//返回距 1970-1-1的毫秒数
  Date d=new Date(l1);
  SimpleDateFormat sdf=new SimpleDateFormat();
  sdf.applyPattern("yyyy-MM-dd HH:mm:ss sss");
  String s=sdf.format(d);
  System.out.println(s);//打印最后修改时间
  boolean b2=f1.isHidden();//判断是否隐藏
  boolean b3=f1.canWrite();//判断是否可写
  boolean b4=f1.exists(); //判断文件或目录是否存在
  if(f3.getParentFile()!=null){
   System.out.println(f3.getPath());//打印路径
  }
  //创建目录
  System.out.println(f3.mkdirs());
  System.out.println(f1.getName());//打印文件名
  //打印目录里的所有文件
  File [] files=f2.listFiles([过滤器]);
  for (int i=0;i<files.length;i++){
   System.out.println(files[i]);
  }
  
     }
二、流是一组有序的,有起点和终点的字节集合,是对计算机中数据传输的总称或者抽象。
    字节流:按照传输的单位为字节的流叫字节流
    字符流:按照传输的单位为字符的流叫字符流
    按照传输的方向划分:输入流和输出流,程序从数据源中的数据流读取数据叫输入流,从当前程序向流中写入数据将信息送至目的端
    细分为:字节输入流、字节输出流  字符输入流  字符输出流
    1、InputStream  字节输入流,所在包java.io
       FileInputStream是InputStream的子类
    2、OutputStream  字节输出流,所在包java.io
       FileOutputStream是outputStream的子类
       如果在写入文件时,文件不存在,会自动创建一个文件但目录不会自动创建
       写入时换行符用\r \n,linux下用\n

     eg:复制文件到另一个磁盘
        public static void main(String[] args)  {
     /*
      * 读取飞秋文件
      */
   
    FileInputStream in=null;
    FileOutputStream out=null;
 try {
  //创建文件输入流,将文件写入字符串S
  in = new FileInputStream("C:\\Program Files\\feiq\\FeiqCfg.xml");
  //创建文件输出流,将字符串S输出到D盘a.txt,true表示追加输出
  out=new FileOutputStream("D:\\a.txt",false);
   byte[] b=new byte[1024];//创建1024字节
     int len=0;
   
     while((len=in.read(b))!=-1){
      out.write(b, 0, len);
     }
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally{
   if(in!=null){
    try {
    in.close();//关闭输入流
     }
    catch (IOException e) {
    // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   if(out!=null){
    try {
    out.close();//关闭输出流
     }
    catch (IOException e) {
    // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
  
  }
   }

三、字符输入流 FileReader  FileReader是InputStreamReader的子类  
    字符输出流 FileWriter  FileWriter是OutputStreamWriter的子类
    File source=new File("D:\\a.txt");
  File dest=new File("E:\\cc.txt");
  FileReader in=null;
  FileWriter out=null;
  try {
   in=new FileReader(source);
   out=new FileWriter(dest);
   char [] chs=new char[1024];
   int len=0;
   while((len=in.read(chs))!=-1){

    out.write(chs, 0, len);

   }
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally{
   if(in!=null){
    try {
     in.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   if(out!=null){
    try {
     out.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
以上四个流都是节点流(跟节流)
四、压缩输出流ZipOutputStream

             File source=new File("d:\\a.txt");
      File dest=new File("d:\\1.rar");
      InputStream in=new FileInputStream(source);
      ZipOutputStream zout=new ZipOutputStream(new FileOutputStream(dest));
      ZipEntry zip=new ZipEntry(source.getName());//定义ZIP入口
      zout.putNextEntry(zip);//放入下一个入口
      int tem=0;
      while((tem=in.read())!=-1){
       zout.write(tem);
      }
      in.close();
      zout.close();
五、过滤流
给节点流增加某些功能,必须借助于节点流使用
FilterOutputStream
1、BufferedOutputStream是FilterOutputStream的子类,实现加缓存功能
     File  file=new File("d:\\a.txt");
  OutputStream  out=new  FileOutputStream(file,true); 
         BufferedOutputStream  bf=new  BufferedOutputStream(out);
         String  s="我喜欢java11";
         byte  []  b=  s.getBytes();
         bf.write(b);
                bf.flush();
                bf.close();

2、BufferedReader的readline方法
                 Reader  re=new FileReader("d:\\a.txt");
  BufferedReader  br=new  BufferedReader(re);
          String  s= br.readLine();
                System.out.println(s);
六、转换流 把字符流转成字节流或把字节流转换成字符流叫转换流InputStreamReader
        InputStreamReader  in=new   InputStreamReader(new FileInputStream("d:\\a.txt")); //定义转换流
  char  c[] =new  char[1024];
  int len= in.read(c);
  System.out.println(new  String(c));
  InputStreamReader  in1=new  InputStreamReader(System.in);//将字符流转换成字节流
  BufferedReader  bf=new  BufferedReader(in1);//使用buffer流的readline方法
  String  s1= bf.readLine();
  System.out.println(s1);
 
七、对象流
ObjectOutputStream  对象输出流
方法用writeobject
ObjectInputStream   对象输入流
方法用readobject

 

 

 

作业:1、读取一张图片,把实际读取的字节个数打印出来,再打印了多少次
      2、复制一张图片到另一个磁盘
      3、复制超大文件到副一个磁盘,添加百分比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值