zoukankan      html  css  js  c++  java
  • io流-文件流节点流

    FileOutputStream类(jdk1.0)

    描述

    • java.io.FileOutputStream 类是文件字节输出流,用于将数据写入到文件中。

    构造方法

    //构造方法
    FileOutputStream​(File file) 创建文件输出流以写入由指定的 File对象表示的文件。  
    FileOutputStream​(String name) 创建文件输出流以指定的名称写入文件。 
               *参数
               * file file:目的地是一个文件
               * string name:目的地是一个文件路径
    //当你创建一个流对象时,必须先传递一个文件路径,该路径下,如果没有这个文件,会创建该文件
    //,如果有这个文件,会清空这个文件中的数据。然后把你想要的数据写入中。
    
    FileOutputStream(File file,boolean append);创建文件出入流以写入由指定的File对象表示的文件中。
    FileOutputStream(String name,boolean append);创建文件输出流以指定的名称写入文件中
    //这两个构造方法,参数中都需要传入一个Boolean类型的值,
    //true表示的追加数据,false表示覆盖原文件
    

    代码实例

    public static void main(String[] args) throws IOException {
    	//FileOutputStream​(String name) 创建文件输出流以指定的名称写入文件。
    	FileOutputStream fops = new FileOutputStream("day28_IO\a.txt");
    	//调用写入方法
    	fops.write(97);
    	//关闭流
    	fops.close();
    }
    

    图集分析

    image

    数据的追加续写

    • 如何在保留文件中的数据,还能继续添加新的数据到目标文件中?
    • 使用带两个参数地构造方法

    代码实例

    	//创建对象
    	File file = new File("day28_IO\c.txt");
    	FileOutputStream fops = new FileOutputStream(file,true);
    	//调用write方法写入
    	fops.write("张三".getBytes());
    	//关闭流
    	fops.close();
    

    写入换行

    • windows系统里,换行符是: 。把以指定是否需要追加续写换行。
      linux系统中,换行符号是: /r /n.
      mac系统中,换行符号是 :/r
      unix系统里,每行结尾只有换行,即:

    • 回车符 和换行符
      回车符:回到一行的开头。
      换行符:下一行(new Line)。

    • 系统中的换行:
      windows系统中,每行结尾是:回车加换行。即, 。
      Linux系统中,每行的结尾只有换行,即,/n。
      mac系统中,每行的结尾是回车,即,/r。

    FileInputStream类

    描述

    • java.io.FileInputStream 类是文件输入流,从文件中读取字节。

    常用方法

    //构造方法
    FileInputStream​(File file)  通过打开与实际文件的连接来创建一FileInputStream ,该文件由文件系统中的 File对象 file命名。  
    FileInputStream​(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
    //当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileFoundException。
    //普通方法
    int available​() 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。  
    

    读取数据的原理

    • java --> JVM --> OS --> OS调用系统中读取数据的方法 -->读取文件中的数据

    代码实例

    public static void main(String[] args) throws IOException {
    	FileInputStream fis = new FileInputStream("C:\c.txt");
    	int len = 0;
    	byte[] bytes = new byte[1024];
    	while ((len = fis.read(bytes)) != -1) {
    		//System.out.println(new String(bytes));
    		System.out.println(new String(bytes, 0, len));
    	}
    	fis.colos();
    }
    //可以使用字节数组来读取数据:read(byte[] b):从输入流中读取多个字节,并且将其存储到缓冲区数组b当中
    
    • 备注;使用数组读取,每次可以读取多个字节,减少系统间的io操作次数,从而提高了读取的效率,建议使用。

    • 练习从系统中读取一个图片复制到桌面上

      //1.创建一个字节输入流对象,构造方法中绑定需要读取的路径
      //2.创建一个字节输出流对象,构造方法中绑定需要写入的文件
      //3.使用字节输入流对象中的read方法读取文件
      //4.使用字节输出流对象中的write方法,把读取到字节写入到指定的文件中
      //5.释放资源(先开的后关,后开的先关/相当于栈)
      //复制文件
      public static void main(String[] args) throws IOException {
          //来源
          File source = new File("D:\aa.jpeg");
          //目的地
          File destination = new File("E:\bb.jpeg");
          try (FileInputStream fis = new FileInputStream(source);
               FileOutputStream fos = new FileOutputStream(destination)
          ) {
              System.out.println(fis.available() + "available");
              //public int available​() throws IOException 获取文件字节
              byte[] arr = new byte[fis.available()];
              int a = 0;
              while ((a = fis.read(arr)) != -1) {
                  fos.write(arr);
              }
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
      

    FileReader

    描述

    • java.io.FileReader 类主要适用于读取字符文件的便携类。构造方法使用默认的编码字符集和默认的字符缓冲区。
      备注;
      1. 字符编码:字节于字符对应的规则。Windows系统中的编码默认是GBK编码表,idea中采用的是utf-8
      2. 字节缓冲区:一个字节数,用来临时存储字节数据。

    构造方法

    FileReader(File file);创建一个新的FileRead对象,File是指定需要读取的对象
    FileReader(String filename);创建一个新的FileReader对象,指定需要读取的文件名称
        参数;读取文件的数据员
        	String filename;文件的路径
        	File file;一个文件
        构造方法的作用
        	1.创建FileReade一个对象
            2.会把创建FileReade对象指向需要读取的文件
    //当你创建一个流对象时,必须传入一个文件路径,类似于FileInputStream
    

    练习

    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("day28_IO\c.txt");
        /*  int temp = 0;//记录读取的字符
            while ((temp = fr.read()) != -1) {
                System.out.print((char) temp);//强转
            }*/
        int temp = 0;//记录的是每次读取的有效个数
        char[] c = new char[1024];
        	/*
             * char数组类型转字符串
             * static String.valueOf(参数列表);
             * String(char[] value)
             * String (char[] value,int offset,int count)
             * */
        while ((temp = fr.read(c)) != -1) {
            //          System.out.print(String.valueOf(c));
            System.out.println(new String(c));
        }
        fr.close();
    }
    //使用字符数组读取数据;read(char[] chuf),每次读取chuf的长度个字符数组当中,返回读取到有效字符的个数。当它读取到末尾时,返回-1.
    

    FileWriter

    描述

    • java.io.FileWriter 类是用于写入字符到文件中。构造方法使用系统默认的字符编码和默认的字节缓冲区。

    构造方法

    //构造方法
    FileWriter(File file);创建一个新的FileWriter,指定写入的file对象
    FileWriter(String filename);创建一个新的FileWriter,指定需要写入的文件的名称
    FileWriter​(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。  
    FileWriter​(File file, boolean append) 给一个File对象构造一个FileWriter对象。  
    //当你创建一个流的对象时,必须传入一个文件路径
    

    flush和close方法的区别

    1. flush():刷新缓冲区,流对象可以继续使用
    2. close():先刷新缓冲区,然后通知系统释放资源,关闭流对象,流对象不可以在使用了。
    • 关闭和刷新
      因为内置缓冲区的原因,如果不关闭输出流,无法写入字符到文件中。但是关闭流对象,是无法继续写入数据到文件中。如果既想写入数据到文件中,又想继续使用流对象,那么就是使用到方法flush。
    • 续写和换行操作类似于FileOutputStream

    练习

        //字节流练习2:使用字节流把a文件中的数据转换后写到b文件中  大写转换为小写 小写转换为大写 删除数字
        @Test
        public void test2() throws IOException {
            try (FileReader fr = new FileReader("E:\aa\aa.txt");
                 FileWriter fw = new FileWriter("");) {
    
                //FileWriter fw = new FileWriter("");
                int temp = -1;
                while ((temp = fr.read()) != -1) {
                    char ch = (char) temp;
                    if (Character.isLetter(ch)) {
                        if (Character.isLowerCase(ch)) {
                            char c = Character.toUpperCase(ch);
                            fw.write(c);
                        } else {
                            char c = Character.toLowerCase(ch);
                            fw.write(c);
                        }
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    节点流(或文件流):注意点

    • 定义文件路径是,注意:可以用 / 或者 \
    • 在写入一个文件是如果使用 构造器 FileOUtputSteram(file),则目录下有同名文件将被覆盖.
    • 如果使用构造器 FileOutputStream(file,true),则目录下地同名文件不会倍覆盖,
      在文件内容末尾追加内容
    • 读取文件时,必须保证文件已经存在,否则报异常.
    • 字节流操作字节,比如: .mp3 .avi .rmvb .mp4 .jpg .doc .ppt
    • 字符流操作字符,只能操作普通文本文件.最常见地文本文件:
      .txt .java .c .cpp 等语言地源代码.尤其注意: .doc .excel ppt这些不是文本文件.
  • 相关阅读:
    学JAVA第十一天,属性与方法
    学JAVA第十天,一维数组及二维数组的使用。
    限制input[type=number]的输入位数策略整理
    淘宝NPM源的使用
    webpack之loader实践
    5月份开发问题整理
    前后端分离思考
    js 导航栏多项点击显示下拉菜单代码
    阵容首发
    jquery中的ajax请求到php(学生笔记)
  • 原文地址:https://www.cnblogs.com/zk2020/p/15081045.html
Copyright © 2011-2022 走看看