JavaOOP 09 I/O流

9.1 File 类

File 类分为两种

  • 绝对路径:就是资源文件在硬盘上的真实路径或者部署到web服务器上之后引用资源的完整路径

  • 相对路径:相对于当前项目/文件的路径的相对路径

9.1.1操作文件和目录

  • File 类表示操作系统的文件或文件夹。

  • File 类的构造方法:


public File (String pathName);
  • pathName 表示在创建File对象的时候需要给的文件路径

  • 创建File 对象语法:


File file=new File("文件路径");

####File 类的常用语法

方法名称

说 明

boolean exists( )

判断文件或目录是否存在

boolean isFile( )

判断是否是文件

boolean isDirectory( )

判断是否是目录

String getPath( )

返回此对象表示的文件的相对路径名

String getAbsolutePath( )

返回此对象表示的文件的绝对路径名

String getName( )

返回此对象表示的文件或目录的名称

boolean delete( )

删除此对象指定的文件或目录

boolean createNewFile( )

创建新文件

long length()

返回文件的长度,单位为字节, 如果文件不存在,则返回 0L


public class Test {
    public static void main(String[] args) {
        try {
            File file = new File("abc/def/啦啦啦.txt");
//          file.createNewFile(); 
            //创建一个文件不包含文件夹
//          System.out.println(file.getParentFile());
            //拿到上一层文件夹对象  返回File
//          System.out.println(file.getParent()); 
            //返回值String
//          file.mkdir();
            //创建一个文件夹 但是不能创建多级
//          file.mkdirs();
            //创建多级文件夹
//          file.renameTo(new File("abc/def/啦啦啦.txt")); //文件重命名
//          file.delete();
            //删除文件

            //查询
            System.out.println(file.exists());
            //判断上层文件是否存在 boolean   
            System.out.println(file.isAbsolute());
            //判断文件是否是绝对路径 boolean
            System.out.println(file.getName()); 
            //查找当前文件名 String
            System.out.println(file.isDirectory());
            //判断文件是否是文件夹
            System.out.println(file.isFile()); 
            //判断文件是否是文件  boolean
            System.out.println(file.length()); 
            //文件大小 int
            System.out.println(file.getName()); 
            //当前文件名
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

I/O 流概述

I 对应的是input,指读入操作,O 对应 output,指写出操作。

流的分类:

  • 按照读写的方向来讲,分为输入流和输出流,站在程序的角度去分析

  • 按照读写内容的单位来讲,分为字节流和字符流

  • 按照流的功能不同分为节点流和处理流

节点流: 直接连接在文件上的

处理流: 套在其他流上的

1.按流向划分:输入流和输出流

输入流

程序读取数据源

只能从中读取数据,不能写入数据流,实现程序从数据源中读数据。

输出流

程序向数据源写程序

只能向其写入数据,而不能从中读取数据的流,实现程序向目标数据源中写程序

2.按处理单元划分:字节流和字符流

  • 字节流:以 8 位通用字节流,字符流是 16 位 Unicode 字符流,可用于二进制数据。

  • 字符流:以16位的字符为操作数据单元的流,可用于操作文本数据

字节流和字符流的用法几乎相同。向下细分,还可以划分为字节输入流、字节输出流、字符出入流、字符输出流

输入

输出

字节流

InputStream

OutpueStream

字符流

Reader

writer

  • 可以把I/O 流看做一个水管,水管里有依次排列的水滴,每个水滴就是一个处理单元。

  • 在字节流中每滴水滴是一个字节。

  • 字符流中每滴水滴是一个字符。

3.按流的角色划分:节点流和处理流

节点流:可以直接向一个特定的存储介质(如磁盘、文件)读写数据的流。

处理流:用于对一个已存在的流进行连接和封装,通过封装后的流实现数据读写操作的流。

9.3 字节流

字节流主要操作的是byte 类型数据,其基类就是 OutputStream 类和 InputStream 类。

9.3.1 字节输出流基类:OutputStream

OutputStream 类为抽象类,必须使用该类的子类进行实例化对象。

需要操作文件使用 FileOutputStream 实例化。

表 OutputStream 类中的主要操作方法

方法

描述

void close()

关闭输出流

void flush()

刷新缓冲区

void write(byte[] b)

将每个 byte 数组写入数据流

void write(byte[] b,int off,int len)

将每个指定范围的byte 数组写入数据流

void write(int b)

将一个字节数据写入数据流

9.3.2 字节输出流 FileOutputStream 类

  • 三种构造方法

  • 在创建对象的时候需要传参

方法

描述

FileOutputStream(File file)

用于创建向指定 File 对象写数据的文件输出流

file:指定目标文件的对象

FileOutputStream(String name)

用于创建向指定路径的文件写数据的文件输出流

name:指定目标文件的路径字符串

FileOutpueStream(String name,boolean append)

创建一个向指定路径的文件写入的数据的文件输出流。

name:指定一个目标文件的路径字符串

append:表示是否在文件末尾追加数据,true:追加


import java.io.File;
import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

public class FileOutputStream {
    //字节输出流类
    public static void main(String[] args) {
        //第一种创建对象 String
//        String url="D:\\lyc.txt";
//        OutputStream ops=new java.io.FileOutputStream(url);
        //第二种直接在里边写
        //        OutputStream ops=new java.io.FileOutputStream(D:\lyc.txt);
        //第三种创建一个 File 对象给一个路径 ,在将File 对象写到 FileOutputStream() 里边
        File file=new File("D:\\lyc.txt");
        try {
            OutputStream ops=new java.io.FileOutputStream(file);
            String name="刘家乐";
            byte [] bytes=name.getBytes();
            // 字节数组,从0开始,到bytes.length结束
            ops.write(bytes,0,bytes.length);
            if(ops!=null)
            {
                //格式化刷新缓冲区
                ops.flush();
                //关闭流
                ops.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

9.3.3 字节输入流基(父)类:InputStream

可以通过 InputStream 类从文件中读数据。InputStream 类同样也是抽象类。

InputStream 类定义的主要方法

方法

描述

int read()

读取一个字节数据

int read(byte[] b)

将数据读取到字节数组里

int read(byte[] b,int off,int len)

从输入流中读取最多 len 长度的字节,保存到字节数组中,保存的位置从off开始

void clear()

关闭输入流

int available()

返回输入流读取的字节数

9.3.4 字节输入流 FileInputStream 类

  • 通常使用 InputStream 类的FileInputStream 子类实现文本文件的读取

方法

描述

FileInputStream(File file)

用于创建从指定 File 对象读取数据的文件路径

file:指定路径的对象

FileInputStream(String s)

用于创建从指定路径读取数据的文件路径

s:指定路径

实例

通过使用字节输入流从指定文件中读取数据。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class FileInputStream {
    //字节输入流类
    public static void main(String[] args) {

        File file=new File("D:\\lyc.txt");
        try {
            InputStream is=new java.io.FileInputStream(file);
            int len=0;
            //读取一个字节 读取到的是阿克斯码值
            System.out.println(is.read());
            //可读取的字节数
            System.out.println(is.available());
            //第一种方法循环读取数据
//            while ((len=is.read())!=-1){
//                System.out.print((char) len);
//            }
            //第二种方法读取
            byte[] bytes=new byte[(int)file.length()-1];
            if ((len=is.read(bytes))>0){
                System.out.println(new String(bytes));
            }
            //关闭输入流
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意

1.按字节读取并显示数据时需要进行强制类型转换
  • 使用 read() 方法读取数据,每次读取一个8为字节,把它转换为 0~255的整数返回。

2.对是否读到文件末尾的判断
  • 使用read() 方法读取文件中的数据,当返回结果为 -1时,即输入流已经读到末尾,在循环读取的过程中,可以一次作为循环结束的条件。

3.与字节输出流用法相同,在创建输入流对象、读取数据、关闭流时必须进行异常处理

9.4 字符流

一个字符占用内存的两个字节。如果用字节流处理文本文件,程序内部需要字节转换成字符,降低了执行效率,当输入和输出文本文件时,尽量使用字符流。

9.4.1 字符输出流基(父)类:Writer

Writer 类时字符除数流的抽象父类。

Writer 类中的常用方法

方法

描述

void write(String str)

将str 字符串中包含的字符输出到输出流中

void write(String str,int off,int len)

将字符串中从 off 位置开始、长度为 len 的字符输出到输出流中

void close()

关闭输出流

void flush()

刷新输出流

9.4.2 字符输出流 FileWriter 类

FileWriter 类时 Writer 类常用的子类,使用 FileWriter 可以以字符为数据处理单元向文本文件中写数据。


import java.io.IOException;
import java.io.Writer;
public class FileWriter {
    //字符输出流
    public static void main(String[] args) {
        //创建一个null的对象
        Writer fw=null;
        try {
            // 创建一个 FileWriter 将文件路径交给它
             fw=new java.io.FileWriter("D:\\zf.txt");
            fw.write("成功的男人");
            fw.flush();
            System.out.println("文件写入成功");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件不存在");
        }finally {
            if(fw!=null)
            {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

使用 flush() 方法清空输出流 FileWriter,它可以强制将其中残余的数据写入文本文件,这样,才算完成全部数据的写操作,这时再使用 close() 方法关闭流。

9.4.3 字符输入流基(父)类: Reader

Reader 类是字符输入流的基(父)类,它是抽象类。

Reader 类中的常用方法

方法

描述

int read()

从输入流中读取单个字符,返回所读取的字符数据

int read(char[] c)

从输入流中最多读取 c.length 个字符数据并将其存储在字符数据 c 中,返回实际读取的字符数

int read(char[] c,int off,int len)

从输入流中最多读取 len 个字符的数据并将其存储在字符数组 c 中。

在存入数组 c 中时,并不是从数组起点开始的,而是从 off 位置开始的,返回实际读取的字符数。

  • Reader 类和 InputStream 类所提供的方法,它们基本是相同的。

  • 如果将输入流比作水管,那么可以通过read() 方法每次读取一滴"水滴",也可以通过 read(byte[] c)方法或read(char[] c,int off,int len)方法每次读取多滴水滴,多次重复执行去睡的过程,当方法返回值为 -1 时,表示到了输入流的结束点,也就是取水完毕。

9.4.4 字符输入流 FileReader

Reader 类同样是抽象类,可以使用其子类 FileReader 创建对象。

使用字符输入流 FileReader 实现读取 "路径"中的数据。


import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;

public class FileReader {
    public static void main(String[] args) {
        //创建一个 File 类
        File file=new File("D:\\zf.txt");
        //定义一个 Reader 
        Reader rd=null;
        try {
            //nwe 一个FileReader对象
            rd=new java.io.FileReader(file);
            //文档的大小 字节
            System.out.println(file.length());
            //创建一个 char 类型的数组   将获取的字节大小给它
            char [] chars=new char[(int)file.length()];
            int len=0;
            //循环使用read() 方法读取数据
            while (( len=rd.read(chars))!=-1){
                //循环输出 从0到len长度
                System.out.println(new java.lang.String(chars,0,len));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally{
            //关闭流对象
            if(rd!=null)
            {
                try{
                    rd.close();
                }catch(IOException e){
                    
                }
            }
        }
    }
}

9.5 缓冲流

缓冲流属于处理流

9.5.1 字符缓冲输出流 BufferedWriter 类

  • BufferedWriter 类使 Writer 类的子类。

  • BufferedWriter 类可以把一批数据写到缓冲区,默认情况下,只有在缓冲区满的时候,才会把缓冲区的数据真正写到目的地。

  • 这样能减少物理写数据的次数,提高I/O操作的执行效率

BufferedWriter 类的常用方法

方法

描述

BufferedWriter(Writer out)

创建一个缓冲字符输出流

使用BufferedWriter 对象向文本文件中写数据


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class BufferedWriter1 {
    public static void main(String[] args) {
        Writer fw=null;
        BufferedWriter bw=null;
        try {
            fw=new FileWriter("D:\\lyc.txt");
             bw=new BufferedWriter(fw);
             bw.write("亲爱的小伙伴们:");
             bw.newLine();
             bw.write("让我们一起刷新缓冲区吧");
             bw.flush();
            System.out.println("文件写入成功");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(bw!=null&&fw!=null)
            {
                try {
                    bw.close();
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 创建 BufferedWriter 对象需要借助一个Writer 对象,在该对象的基础上进一步封装,成为一个带缓冲区的字符输出流。

  • newLine() 方法是BufferedWriter 类中的方法,作用是插入一个换行符。

  • 关闭流时,需要先关闭 BufferedWriter 对象,再关闭FileWriter 对象。

9.5.2 字符缓冲输入流 BufferedReader 类

  • BufferedReader 类是 Reader 类的子类。

  • 它与 FileReader 类的区别就在于 BufferedReader 类有缓冲区,它可以先把一批数据读到缓冲区中,避免每次都从数据源读取数据进行字符编码转换。

BufferedReader 类常用的构造方法

方法

描述

BufferedReader(Reader in)

创建一个缓冲字符输入流

使用BufferedReader 对象读取文本文件 中的数据并输出到控制台。


public class BufferedReader1 {
    public static void main(String[] args) {
       
        Reader fr =null;
        BufferedReader br=null;
        try {
             //创建一个Reader对象
            fr=new FileReader("D:\\lyc.txt");
            //创建一个 BufferedReader
            br=new BufferedReader(fr);
            //使用 BufferedReader 类的 readLine() 方法按行读取内容
            String line=br.readLine();
            //利用 while 循环将读取到的内容输出到控制台中
            while (line!=null){
                System.out.println(line);
                line=br.readLine();
            }
        } catch (IOException e) {
           e.printStackTrace();
        } finally { 
            try {
                if(br!=null)
                {
                    br.close();
                }
                if(fr!=null){
                    fr.close();
                }
            } catch (IOException e) {
               e.printStackTrace();
            }
        }
    }
}
  • 创建BufferedReader 对象 FileReader 对象在FileReader 基础上进行封装升级

9.6 数据操作流

  • 对二进制文件的读写操作

9.6.1DataOutputStream和DataInputStream 类

  • DataOutputStream 类是OutputStream 类的子类,利用 DataOutputStream 类写二进制文件的实现步骤与使用 FileOutputStream类写文件的步骤极其相似,而且用到了 File Output Stream 类。

  • DataInputStream 类是 InputStream 类的子类,在使用上也和 FileInputStream 类很相似


public class Test {
    public static void main(String[] args)  {
        //创建File对象 赋给它路径
        File file=new File("C:\\Users\\zhaom\\Pictures\\girl_3.gif");
        FileInputStream fileInputStream=null;
        DataInputStream dataInputStream=null;
        FileOutputStream fileOutputStream=null;
        DataOutputStream dataOutputStream=null;
        try {
            //创建输入流文件
             fileInputStream=new FileInputStream(file);
             dataInputStream=new DataInputStream(fileInputStream);

             //创建输出流文件
            File file1=new File("E:\\主题\\落败\\1234.png");
             fileOutputStream=new FileOutputStream(file1);
             dataOutputStream=new DataOutputStream(fileOutputStream);
            int temp;
            while ((temp=dataInputStream.read())!=-1){
                if(temp!=255)
                {
                    temp++;
                }
                dataOutputStream.write(temp);
            }
        } catch (IOException e) {
           e.printStackTrace();
        } finally {
            try {
                //关闭数据输出流
                dataOutputStream.close();
                //关闭字节输出流
                fileOutputStream.close();
                //关闭数据输入流
                dataInputStream.close();
                //关闭字节输入流
                fileInputStream.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
        }
    }
}
  • DataOutputStream 要和 DataInputStream 搭配着使用

  • 接收进来的二进制文件都是以字节的方式存储

  • 使用DataInputStream 将要复制到某一个盘中的二进制文件,先录入进系统,在使用DataOutStream 将文件输出到想要复制到的位置。

  • DataInputStream 类的 writeUTF() 方法能写入采用 UTF-8 字符编码的字符串。

  • DataOutputStream 类的readUTF() 方法能读取采用 UTF-8 字符编码的字符串

9.7 序列化与反序列化

  • 序列就是将对象的状态更轻松简单地存储到特定介质中的过程,也就是将u第项转换为可保存或可传输格式的过程。

  • 序列化的意义在于将java对象序列化后,可以将其转换为字节序列,这些字节序列可以保存在磁盘上,也可以借助网络进行传输

实现序列化和反序列化操作,需要使用对象操作流,

9.7.1 对象输出流 ObjectOutputStream 实现序列化

  • 对象序列化是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便地实现对象的传输和存储。

  • 如果一个类的对象需要被序列化,则这个对象所属类必须实现 java.io.Serializable 接口

  • 语法:


public interface Serializable()
  • 一旦某个类实现了 Serializable 接口,该类的对象就是可以序列化的。


import java.io.Serializable;

public class Person implements Serializable {
      private String name;
      private int age;
      private String sex;
      public Person(String name, int age, String sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
      }
      public void print()
      {
            System.out.println("姓名:"+this.name+"年龄:"+this.age+"性别:"+this.sex);
      }
}
  • Person 类已经实现了 Serializable 接口,所以 Person 类可以被序列化

  • 它可以将对象转成二进制字节数据输出到文件中保存。

一个对象如果进行序列化输出,则需要使用 ObjectOutputStream 类

方法

描述

类型

ObjectOutputStream(OutputStream out)

创建对象输出流对象

构造方法

final void write(Object obj)

将指定对象写入流

实例方法


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class PersonTest {
    public static void main(String[] args) {
        //创建一个对象输出流
        ObjectOutputStream oss=null;
        //创建一个File 文件处理对象
        File file=new File("D:\\ljy.txt");

        try {
            //判断文件是否存在
            if(!file.exists())
            {
                //如果不存在就创建一个新的文件
                file.createNewFile();
            }
            //创建一个字节输出流对象
            FileOutputStream fileOutputStream=new FileOutputStream(file);
            //创建对象输出流 将字节输出流对象引用交给它
            oss=new ObjectOutputStream(fileOutputStream);
            //创建对象
            Person person=new Person("杰米",18,"男");
            //将创建好的类对象传到文件里
            oss.writeObject(person);
            System.out.println("序列化成功");
            //刷新缓冲区
            oss.flush();
            //关闭对象输出流
            oss.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

当我们需要保存多个对象时可以使用集合对象,最后将集合写入文件


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class ListObjectOutput {
    public static void main(String[] args) {
        //创建File 文件处理对象
        File file=new File("D:\\ljy.txt");
        ObjectOutputStream obs=null;
        try {
            //判断文件是否存在
            if(!file.exists())
            {
                //如果不存在就新建一个文件
                file.createNewFile();
            }
            //创建 FileOutputStream 字节输出流对象
            FileOutputStream fileOutputStream=new FileOutputStream(file);
            //创建对象输出流 ObjectOutputStream
            obs=new ObjectOutputStream(fileOutputStream);
            //创建Person对象
            Person person1=new Person("李四",18,"男");
            //创建Person 对象
            Person person2=new Person("王五",20,"男");
           
            //创建 ArrayList对象
            List list=new ArrayList();
             //创建了两个Person对象
            //将它们分别放入ArrayList集合里
            list.add(person1);
            list.add(person2);
            //将集合添加到文件中
            obs.writeObject(list);
            System.out.println("序列化成功");
            //刷新缓冲区
            obs.flush();
            //关闭
            obs.close();

        } catch (IOException e) {
           e.printStackTrace();
        }
    }
}
  • ArrayList 对象 list 中存储了两个 Person 对象,使用writeObject() 方法将其写入对象输出流,这样在文件中就保存了两个Person对象的数据信息。

使用对象输出流 ObjectOutputStream 序列化对象的主要步骤如下。

  • 导入相关类。

  • 创建可序列化的类,要求实现 Serializable 接口。

  • 创建一个对象输出流 (ObjectOutputStream),它可以包装一个其他类型的字节输出流,如文件输出流FileOutputStream。

  • 通过对象输出流的 writeObject() 方法写对象,也就是输出可序列化对象。

  • 关闭对象输出流。

9.7.2 对象输入流 ObjectInputStream 实现反序列化

  • 执行反序列化操作需使用对象输出流 ObjectInputStream,它可以直接把序列化后的对象还原。

ObjectInputStream 类的常用方法

方法

描述

类型

ObjectInputStream(InputStream in)

创建对象输入流对象

构造方法

final Object readObject()

从指定位置读取对象

实例方法

使用对象输入流 ObjectInputStream 实现将之前序列化的Person对象 通过反序列化操作读取出来


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;

public class InputStreamTest {
    public static void main(String[] args) {
        
        //创建一个File 文件处理对象
        File file=new File("D:\\ljy.txt");
        ObjectInputStream ops=null;

        if(file.exists())
        {
            try {
                //创建一个 字节输入流 FileInputStream 将file对象引用交给它
                FileInputStream fileInputStream=new FileInputStream(file);
                //创建一个对象输入流
                ops=new ObjectInputStream(fileInputStream);
                //用Person 类对象来接收读取到的数据 将读取到的数据强转成Person类
                Person person=(Person)ops.readObject();
                //在调用Person 的方法
                person.print();
                //关闭对象输入流
                ops.close();
                //关闭字节输入流
                fileInputStream.close();
            } catch (Exception e) {
               e.printStackTrace();
            }
        }
    }
}

同样使用 ArrayList将文件读取到数据里


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List;

public class ListInputStream {
    public static void main(String[] args) {
        //创建一个File 文件处理对象
        File file=new File("D:\\ljy2.txt");
        ObjectInputStream ops=null;
        try {
            if(file.exists())
            {
                //创建一个 字节输入流 FileInputStream 将file对象引用交给它
                FileInputStream fileInputStream=new FileInputStream(file);
                //创建一个对象输入流
                ops=new ObjectInputStream(fileInputStream);
                //使用List 集合来接受读取到的两个对象 强转成ArrayList 类型集合
                List<Person> list=(ArrayList)ops.readObject();
                //使用for循环遍历 将读取到的数据交给Person 对象
                for (Person person:list){
                    //调用方法进行测试
                    person.print();
                }
                //关闭对象输入流
                ops.close();
                //关闭字节输入流
                fileInputStream.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意

  • 如果使用序列化方式向文件中写入多个对象,那么反序列化恢复对象时,也要按照写入的顺序读取

  • 如果希望 某一个属性信息不被序列化,只需早 属性 前添加 transient 关键字

  • private transient int age;

Java 体系中常用的流的分类

分类

字节输出流

字节输入流

字符输出流

字符输入流

基(父)类

OutputStream

InputStream

Writer

Reader

文件流

FileOutputStream

FileInputStream

FileWriter

FileReader

缓冲流

BufferedOutputStream

BufferedInputStream

BufferedWriter

BufferedReader

对象流

ObjectOutputStream

ObjectInputStream

——

数据操作流

DataOutputStream

DataInputStream

————

  • 所有的基(父)类都是抽象类,无法直接创建实例,需要接触实现类。

  • 所有的输出流用于实现写数据操作,所有的输入流用于实现读取操作。这个输入和输出时相对程序而言。

  • 所有文件流直接与存储介质关联,也就是需指定物理节点,属于节点流其它流的创建需要在节点流的基础上进行封装,使其具有特殊的功能,比如,缓冲流再节点流的基础上增加了缓冲区,对象流在节点流的基础上可实现实例化对象。

  • 在操作文本文件时,应使用字符流,操作全英文的文件时可以使用字节流、操作对象的时候可以使用对象流。

总结

  • File 类用来访问文件和目录。

  • FileInputStream 和 FileOutputStream 实现以字节流的方式读写文本文件

  • FileWriter 类和 FileReader 类实现以字符流的方式读写文件。

  • BufferedWriter 类和BufferedReader 类为字符缓冲流,具有缓冲区,执行效率高。

  • DataInputStream 和 DataOutputStream 可用于读写二进制文件。

  • 序列化可以将对象储存到文件中。

  • 序列化和反序列化使用对象输出/输入流 ObjectInputStream 和ObjectOutputStream。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值