zoukankan      html  css  js  c++  java
  • Java进阶之I/O流

    Java进阶之I/O流

    Java进阶之I/O流

    • 将数据从一种平台转移到另外一种平台的技术手段

    I(输入流)/O(输出流)

    流分类

    • 按方向分
      • 输入流
      • 输出流
    • 按单位分
      • 字节型输入流FileInputStream
      • 字节型输出流FileOutputStream
      • 字符型输入流FileReader
      • 字符型输出流FileWriter
    • 按功能分
      • 节点流
      • 处理流

    I/O流工作机制

    • 输入流用来将硬盘上的文件内容从硬盘读取到内存里,输入流用来进行读操作
    • 输出流是用来将内存的文件内容从内存中写入到硬盘里,输出流用来进行写操作
    • 电脑A输出流 = 电脑B输入流,反之
    • 决定文件的不是文件名+后缀名,文件内容是决定文件类型的关键,后缀名决定的是默认打开方式

    File类 Java中用来表示文件或文件夹的一种类,而且是一种抽象的表现形式

        public static void fileTest(){
            File file = new File("d://testIO/test/test.txt");
            File file1 = new File("d://testIO/test");
            //流会有编译时异常
            try {
                file1.mkdirs();
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    File常用类

    • 当文件不存在时创建:createNewFile()
    • 删除: delete()
    • 判断文件或目录是否存在:exists()
    • 获取文件或目录的名称(相对路径):getName()
    • 获取绝对路径:getPath
    • 判断这个路径是否是绝对的:isAbsolute()
    • 判断是文件还是文件夹:isDirectory()
    • 判断文件是什么文件: 普通文件isFile(),隐藏文件isHidden()
    • 返回文件上一次修改时间:lastModified
    • 创建文件夹:mkdir()
    • 级联创建文件夹:mkdirs()
    • 重命名:renameTo()

    字符集

    • 规定拆分和重组时的算法,同一字符集拆分重组算法互逆
    • 重组之前内容不可改变
    • 规定了码值的取值范围

    IO流

      • 输入流
        • 字节输入流
          • 输入流读取,从硬盘(操作系统 拆分成字节)读取到内存(将传输的数据重组)
          • FileInputStream fileInputStream = new FileInputStream(file)
          • 读取一个字符fileInputStream.read() -- 获取到的是int类型,输出需要转型
          • 关闭链接 fileInputStream.close()
    public class TestInputStream {
        public static void main(String[] args) throws FileNotFoundException {
            FileInputStream fileInputStream = new FileInputStream("d://Test、、test.txt");
        }
    }
        • 字符输入流
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class TestReader {
        public void testReader() {
            FileReader fileReader = null;
            try {
                fileReader = new FileReader(new File("d://Test//test.txt"));
    
                char[] c = new char[20];
                int i = fileReader.read(c);
                while(i != -1){
                    String s = new String(c,0,i);
                    System.out.println(s);
                    i = fileReader.read(c);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (fileReader != null){
                    try {
                        fileReader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
      • 输出流
        • 字节输出流
        • 内存拆分->传输->硬盘重组
        • 非追加模式FileOutputStream fileOutputStream = new FileOutputStream(file)
        • fileOutputStream.write('a');
        • fileOutputStream.flush();
        • 追加模式FileOutputStream fileOutputStream = new FileOutputStream(file,true)
    public class TestOutputStream {
        public static void main(String[] args) throws FileNotFoundException {
            FileOutputStream fileOutputStream = new FileOutputStream(new File("d://Test//test.txt"));
        }
    }
        • 字符输出流
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class TestWriter {
        public void testWriter() {
            FileWriter fileWriter = null;
            try {
                fileWriter = new FileWriter(new File("d://Test/test.txt"),true);
                fileWriter.write("
    哔哩哔哩干杯
    ");
                fileWriter.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fileWriter != null){
                    try {
                        fileWriter.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    
            }
        }
    }
      • 缓冲流
        • BufferedInputStream
        • BufferedOutputStream
        • BufferedReader
        • BufferedWriter
        • 缓冲流和普通流方法一样,但是效率更高
        • 缓冲流可以使用readLine(),读取一行
    import java.io.*;
    
    public class BufferedIO {
        public void bufferedIO() throws IOException{
            File file = new File("d://Test/test.txt");
    //        FileInputStream fileInputStream = new FileInputStream(file);
    //        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
    
    //        FileOutputStream fileOutputStream = new FileOutputStream(file);
    //        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
    
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String string = bufferedReader.readLine();
            while(string!=null){
                System.out.println(string);
                //一次读一行
                string = bufferedReader.readLine();
            }
    
            FileWriter fileWriter = new FileWriter(file);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.newLine();
            bufferedWriter.write("写进去一整行");
            bufferedWriter.flush();
            bufferedWriter.close();
            bufferedReader.close();
    //        bufferedOutputStream.close();
    //        bufferedInputStream.close();
            fileWriter.close();
            fileReader.close();
    //        fileOutputStream.close();
    //        fileInputStream.close();
        }
    }

    流的一般应用

      • 文件写入读取流----数据的持久化操作->将数据保存在硬盘上,以便于之后继续使用
      • 标准输入输出流
      • Scanner扫描器
      • 序列化
      • 对象流
        • 将对象进行存储(文件、网络),从存储媒体中(文件、网络)中直接读取对象信息本身
        • 将对象按对象流存储时要将对象序列化,序列化要实现Serializable接口(示意性接口)
        • 可以自定义序列号 栗子:ANY-ACCESS-MODIFIER private static final long(向下兼容) serialVersionUID = 42L
        • 关键字transient,可以声明序列化中特殊的存在 栗子:private transient String tmp
        • 使用transient后,序列化时不会将被transient所描述的对象序列化
    import java.io.Serializable;
    
    public class ObjectIO implements Serializable {
        private String name;
        private int age;
    
        public ObjectIO(){
    
        }
        public ObjectIO(String name,int age){
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
    import java.io.*;
    public class ObjectStream {
        public static void main(String[] args) throws Exception {
            ObjectIO objectIO = new ObjectIO("张三",10);
            FileOutputStream fileOutputStream = new FileOutputStream("E:\JAVA\Java2006\src\com\xumouren\work0814\testObjectIO.txt");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            //将对象写入
            objectOutputStream.writeObject(objectIO);
            objectOutputStream.flush();
            objectOutputStream.close();
    
            FileInputStream fileInputStream = new FileInputStream("E:\JAVA\Java2006\src\com\xumouren\work0814\testObjectIO.txt");
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            objectIO = (ObjectIO)objectInputStream.readObject();
            System.out.println(objectIO.getName()+objectIO.getAge());
        }
    }
    如有问题,请发送邮件至buxiaqingcheng@163.com或者buxiaqingcheng@dingtalk.com
  • 相关阅读:
    人工智能深度学习:TensorFlow2.0如何保持和读取模型?
    人工智能深度学习:TensorFlow2.0实现回归问题
    InnoDB存储引擎中的锁
    Spring源码系列8
    Spring源码系列7
    Spring源码系列6
    Spring源码系列5
    Spring源码系列4
    Spring源码系列3
    Spring源码系列2
  • 原文地址:https://www.cnblogs.com/zhenzhunaichabujiatang/p/13514845.html
Copyright © 2011-2022 走看看