IO流之节点流

IO流

FileReader

  1. read()的理解:返回读入的一个字符。如果文件到达末尾,返回-1

  2. 异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理

  3. 读入的文件一定要存在,否则会报FileNotFoundException。

    使用read()方法

package com.yicurtain.IO;


import org.junit.Test;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class FileReadWriteTest {
//将IOStream下的hello.txt文件内容读入程序中,并输入在控制台。
     @Test
    public void  test(){
//         1.实例化File类的对象,指明要操作的文件
         FileReader fr = null;
         try {
             File file = new File("hello.txt");
//         2. 提供具体的流
             fr = new FileReader(file);
//            3.数据的读入
//            read():返回读入的一个字符。如果文件到达末尾,返回-1
             int data;
             while((data=fr.read())!=-1){
                 System.out.print((char)data);
             }
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
             //         4.流的关闭操作
             try {
                 if (fr!=null)
                 fr.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }

     }
}

IO流之节点流
IO流之节点流

使用read(cbuf)的方法

 @Test
    public void test2(){
         FileReader fr = null;
         try {
             File file = new File("hello.txt");
//         2. 提供具体的流
             fr = new FileReader(file);
//            3.数据的读入
//            read(char[] cbuf):返回每次读入cbuf数组中字符的个数。如果文件到达末尾,返回-1
             char[] cbuf = new char[5];
             int len;
             while((len=fr.read(cbuf))!=-1){
//            将字符串cbuf转换为string,从第0个位置,按长度为len的数组往里面填数据
                 String str = new String(cbuf,0,len);
                 System.out.print(str);
             }
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
             //         4.流的关闭操作
             try {
                 if (fr!=null)
                     fr.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }

FileWrite

  1. 输出操作,对应的File可以不存在。并不会报异常
  2. File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件
  3. File对应的文件如果存在
    1. 如果流使用的构造器是FileWrite(file)或FileWrite(file,false):对原有的文件的覆盖
    2. 如果流使用的构造器是FileWrite(file,true):不会对原有文件覆盖,而是对原有文件追加内容
 @Test
    public void test3() throws IOException {
//        1.提供File类的对象,指明文件路径
         File file = new File("hello1.txt");
//        2.提供FileWriter的对象,用于数据的写出
         FileWriter fr = new FileWriter(file);
//        3.写出的操作
         fr.write("I have a dream!!\n");
         fr.write("I also need to a dream!!");
//        4.流资源的关闭
         fr.close();


     }

文件的复制操作

@Test
//     文件的复制操作
    public void test4(){
         FileReader fr1 = null;
         FileWriter fr2 = null;
         try {
             File file1 = new File("hello.txt");
             File file2 = new File("hello2.txt");

             fr1 = new FileReader(file1);
             fr2 = new FileWriter(file2);

             char[] cbuf = new char[5];
             int len;
             while ((len=fr1.read(cbuf))!=-1){

                 fr2.write(cbuf,0,len);
             }
         } catch (IOException e) {
             e.printStackTrace();
         } finally {

             try {
                 if (fr1!=null)
                 fr1.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
             try {
                 if (fr2!=null)
                 fr2.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }




     }

FileInputStream

同FileReader

FileOutputStream

同FileWrite

结论

  1. 对于文本文件(.txt,.java,.c,.cpp),使用字符流(FileReader/FileWrite)处理
  2. 对于非文本文件(.jpg,.mp3,.mp4,.doc),使用字节流(FileInputString/FileOutputString)处理
上一篇:spring boot vue文件下载(get)


下一篇:SpringMvc配置拦截器