Day09 IO流

I/O流

  1. FileInputStream

     package Io;
     
     import cn.ljy.array.Arrays;
     
     import java.io.FileInputStream;
     
     public class Demo01 {
         public static void main(String[] args) throws Exception{
             FileInputStream inputStream=new FileInputStream("D:/a.txt");//第一步创建一个文件输入通道,并指定路径
     //       第二布读取
     //       System.out.println("===============================");
     //       int word=0;//创建一个空间去接读出来的字符
     //       while( (word =inputStream.read())!=-1){
     //
     //           System.out.println((char) word);
     //       }
             System.out.println("===============================");
     //       byte[] word1=new byte[6];
     //       System.out.println(inputStream.read(word1));
     //       for (byte i: word1) {
     //           System.out.println((char)i);
     //       }
             int count=0;
             byte[] buf=new byte[1000];
             while((count=inputStream.read(buf))!=-1){
                 System.out.println(new String(buf,0,count));
            }//第三步关闭通道
             inputStream.close();
     
     
        }
     }
     
  2. FileOutputStream

     package Io;
     
     import java.io.FileOutputStream;
     import java.nio.charset.StandardCharsets;
     
     public class Demo02 {
         public static void main(String[] args) throws Exception{
             //第一步先创建一个写入对象
             FileOutputStream fos=new FileOutputStream("D:/n.txt",true);
             //第二步写入数据
     
             fos.write('l');
             fos.write(98);;
             fos.write(new byte[]{98,99,100});
             String a="helle world";
             fos.write("helloword".getBytes());
             fos.write(a.getBytes());
             //第三步关闭
             fos.close();
        }
     }
     
  3. BufferedInputStream

     package Io;
     
     import java.io.BufferedInputStream;
     import java.io.FileInputStream;
     /*
     BefferedInputStream的使用
      */
     public class Demo04 {
         public static void main(String[] args) throws Exception{
             //先创建一个FileInputStream
             FileInputStream fis=new FileInputStream("d:/a.txt");
             //在创建一个BufferedInputStream,要将上面创建的低层放入
             BufferedInputStream bis=new BufferedInputStream(fis);
             //缓存区中读取
     //       int date=0;
     //       while((date=bis.read())!=-1){
     //           System.out.print((char)date);
     //       }
             //或者也可以自己写一个缓冲区
             byte[] buf=new byte[1024];
             int date=0;
             while((date= bis.read(buf))!=-1){
                 System.out.print(new String(buf,0,date));
            }
             //关闭
             bis.close();
        }
     }
     
  4. 对象流

    序列化ObjectOutputStream

     package Io;
     
     import java.io.FileOutputStream;
     import java.io.ObjectOutput;
     import java.io.ObjectOutputStream;
     
     public class Demo06 {
         public static void main(String[] args) throws Exception{
             //创建对象流
             FileOutputStream fos=new FileOutputStream("D:/Student.txt");
             ObjectOutputStream oos=new ObjectOutputStream(fos);
             //序列化(写入操作)
             Student s1=new Student(12,"ljy");
             oos.writeObject(s1);
     
             //关闭流
             oos.close();
             System.out.println("序列化完毕");
        }
     }
     

    反序列化ObjectInputStream

     package Io;
     
     import java.io.FileInputStream;
     import java.io.ObjectInputStream;
     
     public class Demo07 {
         public static void main(String[] args) throws Exception {
             //创建对象流
             FileInputStream fis=new FileInputStream("D:/Student.txt");
             ObjectInputStream ois=new ObjectInputStream(fis);
             //反序列化(不能在读里面的值只能读一次在读会报异常)
             Student s21=(Student)ois.readObject();
     
     
             //关闭
     
             ois.close();
             System.out.println("反序列化完成");
             System.out.println(s21.toString());
        }
     }
     
    • 序列化类必须要实现Serializble接口

    • 序列化类中对象属性要求实现Serializble接口

    • 序列化版本号ID,保证序列化的类和反序列化的类是同一个类

    • 使用transient(瞬间的)修饰属性,这个属性不能序列化

    • 静态属性不能序列化

    • 序列化多个对象,可以借助集合实现


    字符流

    FileReader

     package Io.File;
     
     import javax.swing.*;
     import java.io.FileReader;
     
     public class Demo01 {
         public static void main(String[] args) throws Exception {
             //创建字符流
             FileReader fr=new FileReader("d:/a.txt");
     
             //读取
     //       int date=0;
     //       while((date=fr.read())!=-1){
     //           System.out.println((char) date);
     //       }
             //也可以自己创建一个缓冲区来进行
             char[] buf=new char[4];
             int count=0;
             while((count= fr.read(buf))!=-1){
                 System.out.println(new String(buf,0,count));
            }
             fr.close();
        }
     }
     

    字符流缓存流

    BueeredReader(比字节缓存流多个Readline()读取一行这个方法)

    BufferedWriter

     package Io.File;
     
     import java.io.BufferedWriter;
     import java.io.FileWriter;
     
     public class Demo03 {
         public static void main(String[] args) throws  Exception{
             //创建字符缓存流
             FileWriter fw=new FileWriter("d:/12345.txt");
             BufferedWriter bw=new BufferedWriter(fw);
             //写入
             for(int i=0;i<5;i++) {
                 bw.write("hello,wordn你好时间");
                 bw.newLine();
                 bw.flush();
            }
             //关闭
             bw.close();
        }
     }

     


    打印流

     package Io.File;
     
     import java.io.PrintWriter;
     
     /*
     打印流
      */
     public class Demo04 {
         public static void main(String[] args) throws Exception{
             PrintWriter pw=new PrintWriter("D:/amm.txt");
     
             //打印
             pw.println("你好");
             pw.println("0好");
             pw.println("你h");
             pw.println("你啊好");
             //关闭
             pw.close();
             System.out.println("打印完毕");
     
        }
     }
     

    转换流

    package Io.File;
    /*
    转换流
    */
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;

    public class Demo05 {
    public static void main(String[] args) throws Exception{
    //创建转换流
    FileInputStream fis=new FileInputStream("D:/a.txt");
    InputStreamReader isr=new InputStreamReader(fis,"utf-8");
    //读取
    int date=0;
    while((date= isr.read())!=-1){
    System.out.print((char) date);
    }

    FileOutputStream fos=new FileOutputStream("D:/fos.txt");
    OutputStreamWriter osw=new OutputStreamWriter(fos,"gbk");
    for (int i=0;i<5;i++){
    osw.write("你好世界");
    }
    //关闭
    osw.close();
    isr.close();
    }
    }

    创建文件

    package cn.ljy.File;

    import java.io.File;
    import java.io.IOException;
    import java.util.Date;

    public class Demo01 {
    public static void main(String[] args) throws IOException, InterruptedException {
    //创建
    separator();
    }
    public static void separator() throws IOException, InterruptedException {
    System.out.println("路径分隔符"+ File.pathSeparator);
    System.out.println("名称分隔符"+File.separator);
    //新建一个文件
    File file=new File("D://file.txt");
    if(!file.exists()) {
    file.createNewFile();
    System.out.println("是否存在:" + file.exists());
    }
    //删除文件
    //2.1直接删除
    //System.out.println("是否删除了?"+file.delete());
    //2.2让jvm区删除,
    //file.deleteOnExit();
    //Thread.sleep(5000);//删除操作延迟五秒
    //3.获取
    System.out.println("获取绝对路径"+file.getAbsolutePath());
    System.out.println("获取路径"+file.getPath());
    System.out.println("获取文件名"+file.getName());
    System.out.println("获取父目录"+file.getParent());
    System.out.println("获取文件长度"+file.length());
    System.out.println("获取创建时间"+new Date(file.lastModified()).toLocaleString());

    //判断
    System.out.println(file.canRead());//是否可读
    System.out.println(file.isFile());//是否事文件
    System.out.println(file.isHidden());//是否是隐藏的

    }

    }

    文件夹的使用

    package cn.ljy.File;

    import java.io.File;
    import java.io.FileFilter;
    import java.util.Date;

    public class Demo02 {
    public static void main(String[] args) throws InterruptedException {
    //文件夹操作
    directoryOpe();
    }
    //创建文件夹方法
    public static void directoryOpe() throws InterruptedException {
    File dir=new File("d:\\a\\b\\c");
    System.out.println(dir.toString());
    if(!dir.exists()){
    //dir.mkdir();//创建单个文件夹
    //dir.mkdirs();//创建多个文件夹
    System.out.println("创建结果:"+dir.mkdirs());//要直接将创建代码和打印写在一起不然会导致重复创建
    }
    //文件夹的删除方法(注意只有文件夹里没有东西的时候才可以删除)
    //1.0直接删除dir.delete();
    //System.out.println("删除结果:"+dir.delete());//要直接将删除代码和打印写在一起不然会导致重复删除
    //2.0通过jvm删除
    dir.deleteOnExit();
    Thread.sleep(5000);//上一行代码延迟5秒在进行操作

    //文件的的查询
    System.out.println("获取文件夹的绝对路径:"+dir.getAbsolutePath());
    System.out.println("获取文件夹的路径:"+dir.getPath());
    System.out.println("获取文件夹的大小:"+dir.length());
    System.out.println("获取文件夹的名称:"+dir.getName());
    System.out.println("获取文件夹的父目录:"+dir.getParent());
    System.out.println("获取文件夹的创建时间:" + new Date(dir.lastModified()).toString());
    //文件夹的判断
    System.out.println("文件夹是否可读:"+dir.canRead());
    System.out.println("文件夹是不是隐藏"+dir.isHidden());
    //遍历文件夹
    File dir2=new File("D:/图片");

    for (String l:dir2.list()){
    System.out.println(l);
    }
    //FileFilter接口的使用
    File[] file=dir2.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
    if(pathname.getName().endsWith(".jpg"))
    return true;
    else
    return false;

    }
    });
    for (File file2:file){
    System.out.println(file2);
    }

    }
    }

    两个案例

    package cn.ljy.File;

    import java.io.File;

    public class Demo03 {
    public static void main(String[] args) {
    listt(new File("d:/a"));
    dele(new File("d:/a"));
    }
    public static void listt(File file){
    File[] files=file.listFiles();
    System.out.println(file.getAbsolutePath());
    if(files.length>0&&files!=null){

    for (File a:files){
    if(a.isDirectory())
    listt(a);
    else System.out.println(a.getAbsolutePath());
    }

    }
    }
    public static void dele(File file){
    File[] files=file.listFiles();
    if(files.length>0&&files!=null){
    for (File f:files){
    if(f.isDirectory()){
    dele(f);
    }else System.out.println(f.delete());
    }

    }

    System.out.println(file.delete());
    }
    }

     

  5.  

posted on 2021-11-23 10:21  正在学习的小刘  阅读(53)  评论(0)    收藏  举报

导航