• 输入和输出处理


    文件

    相关记录或放在一起的数据的集合

    Java程序如何访问文件属性?

    Java API : java.io.File

    File类访问文件属性

    操作文件或目录的属性(路径、权限、日期和时间等)

    // 获取一个File类对象, 这个对象指向计算机F盘中的demo.txt文件
    File file1 = new File("F:\\demo.txt");

    File类常用方法

    方法名称说明
    boolean exists( )判断文件或目录是否存在
    boolean isFile( )判断是否是文件
    boolean isDirectory( )判断是否是目录
    String getPath( )返回此对象表示的文件的相对路径名
    String getAbsolutePath( )返回此对象表示的文件的绝对路径名
    String getName( )返回此对象表示的文件或目录的名称
    boolean delete( )删除此对象指定的文件或目录
    boolean createNewFile( )创建名称的空文件,不创建文件夹
    long length()返回文件的长度,单位为字节, 如果文件不存在,则返回 0L

    如何读写文件?

    • 通过流来读写文件

      • 流是一组有序的数据序列

      • 以先进先出的方式发送信息的通道

    Java中流的分类

    按流向区分:输入/输出流

    • 输出流:OutputStream和Writer作为基类

    • 输入流:InputStream和Reader作为基类

    按照处理数据单元划分:字节/字符流

    • 字节流

      • 字节输入流InputStream基类

      • 字节输出流OutputStream基类

    • 字符流:

      • 字符输入流Reader基类

      • 字符输出流Writer基类

    FileInputStream

    InputStream类常用方法

    • int read()

      • //创建File类对象
                File file = new File("D://a.txt");
                //创建FileInputStream类对象
                FileInputStream fs = new FileInputStream(file);
        ​
                //读取数据
                int num =fis.read();

    • int read(byte[] b)

      • //创建FileInputStream类对象
        FileInputStream fis = new FileInputStream("F:/a.txt");
        //读取数据
        byte[] bytes = new byte[1024];
        //从流中读取数据,将读取的数据存储在你声明的数组中,该方法返回的结果表示从流中读取到的字节数目
        int num = fis.read(bytes);
        System.out.println(num);

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

    • void close()

      •     //关闭流
            fis.close();

    • int available()

      • 可以从输入流中读取的字节数目

    子类FileInputStream常用的构造方法

    • FileInputStream(File file)

    • FileInputStream(String name)

    使用FileInputStream读取文本文件步骤

    1.引入相关类

    import java.io.IOException;

    import java.io.FileInputStream;

    2.构造文件输入流对象

    FileInputStream fis= new FileInputStream("c:\\test.txt");

    3.读取文本文件的数据

    fis.available();

    fis.read();

    4.关闭文件流对象

    fis.close();

    FileOutputStream

    OutputSream类常用方法

    • void write(int c)

    • void write(byte[] b)

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

    • void close()

    • void flush()

      • 强制把缓冲区的数据写到输出流中

    子类FileOutputStream常用的构造方法

    • FileOutputStream(File file)

    • FileOutputStream(String name)

      通过这两个构造方法创建的输出流对象在对外进行数据输出的时候,会覆盖文件中原来的数据

    • FileOutputStream(File file,boolean append)

    • FileOutputStream(String name,boolean append)

      使用这两个构造方法创建输出流对象的时候,将第二个参数赋值为true,则在对外进行输出数据的时候,不会覆盖文件中原来的数据

    注意:

    创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

    使用FileOnputStream写文本文件步骤

    1.引入相关类

    import java.io.IOException;

    import java.io.FileOutputStream;

    2.构造文件输出流FileOutputStream对象

    FileOutputStream fos = new FileOutputStream("text.txt");

    3.把数据写入文本文件

    String str ="好好学习Java";

    byte[] words = str.getBytes();

    fos.write(words, 0, words.length);

    4.关闭文件流对象

    fos.close();

    Reader

    Reader类常用方法

    • int read()

    • int read(char[] c)

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

    • void close()

    子类InputStreamReader常用的构造方法

    • InputStream(InputStream in)

    • InputStream(InputStream in,String charsetName)

    FileReader

    FileReader类是InputStreamReader的子类

    • FileReader(File file)

    • FileReader(String name)

    该类只能按照本地平台的字符编码来读取数据,用户不能指定其他的字符编码类型

    System.out.println(System.getProperty("file.encoding")); 获得本地平台的字符编码类型

    使用FileReader读取文件步骤

    1.引入相关类

    import java.io.Reader;

    import java.io.FileReader;

    Import java.io.IOExceprion;

    2.创建FileReader对象

    Reader fr= new FileReader("D:\\myDoc\\简介.txt");

    3.读取文本文件的数据

    fr.read();

    4.关闭相关流对象

    fr.close();

    BufferedReader

    如何提高字符流读取文本文件的效率?

    • 使用FileReader类与BufferedReader

      BufferedReader类是Reader类的子类

      BufferedReader类带有缓冲区

      按行读取内容的readLine()方法

    BufferedReader类常用的构造方法

    • BufferedReader(Reader in)

    子类BufferedReader特有的方法

    • readLine()

    使用BufferedReader读文本文件步骤

    1.引用相关类

    import java.io.FileReader;

    import java.io.BufferedReader;

    import java.io.IOException;

    2.构造BufferedReader对象和FileReader对象

    Reader fr = new FileReader("C:\\myTest.txt ");

    BufferedReader br = new BufferedReader(fr);

    3.调用readLine()方法读取数据

    br.readLine();

    4.关闭文件流对象

    br.close();

    fr.close();

    如何解决读取时中文乱码?

    //使用InputStreamReader并设置编码格式

    InputStreamReader fr=new InputStreamReader(fis,"UTF-8");

    Writer

    Writer类常用方法

    • write(String str)

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

    • void close()

    • void flush()

    子类OutputStreamWriter常用的构造方法

    • OutputStreamWriter(OutputStream out)

    • OutputStreamWriter(OutputStream out,String charsetName)

    FileWriter

    FileWriter类是OutputStreamWriter的子类

    • FileWriter(File file)

    • FileWriter(String name)

    该类只能按照本地平台的字符编码来写数据,用户不能指定其他的字符编码类型

    使用FileWriter写文件步骤

    1.引用相关类

    import java.io.Reader;

    import java.io.FileWriter;

    Import java.io.IOException;

    2.创建FileReader对象

    Writer fw= new FileWriter("D:\\myDoc\\简介.txt");

    3.调用readLine()方法读取数据

    fw.write();

    4.关闭文件流对象

    fw.close();

    BufferedWriter

    如何提高字符流写文本文件的效率?

    • 使用FileWriter类与BufferedWriter

      BufferedWriter类是Writer类的子类

      BufferedWriter类带有缓冲区

    BufferedWriter常用的构造方法

    • BufferedWriter(Writer out)

    使用BufferedWriter读文本文件步骤

    1.引用相关类

    import java.io.FileWriter;

    import java.io.BufferedWriter;

    import java.io.IOException;

    2.构造BufferedWriter对象和FileWriter对象

    FileWriter fr = new FileWriter("C:\\myTest.txt ");

    BufferedWriter br = new BufferedWriteer(fr);

    3.调用write()方法读取数据

    br.write("hello");

    4.关闭文件流对象

    br.flush();

    fr.close();

    读写二进制文件

    DataInputStream

    • FileInputStream的子类

    • FileInputStream类结合使用读取二进制文件

    DataOutputStream

    • FileOutputStream的子类

    • FileOutputStream类结合使用写二进制文件

    使用DataInputStream读二进制文件

    1.引入相关的类

    import java.io.FileInputStream;

    import java.io.DataInputStream;

    2.构造数据输入流对象

    FileInputStream fis=new FileInputStream("C:\\HelloWorld.class");

    DataInputStream dis=new DataInputStream(fis);

    3.调用read()方法读取二进制数据

    dis.read ();

    4.关闭数据输入流

    dis.close();

    使用DataOutputStream写二进制文件

    1.引入相关的类

    import java.io.FileOutputStream;

    import java.io.DataOutputStream;

    2.构造数据输出流对象

    FileOutputStream outFile=new FileOutputStream("C:\\temp.class");

    DataOutputStream out=new DataOutputStream(outFile);

    3.调用write()方法读取二进制数据

    out.write ();

    4.关闭数据输入流

    out.close();

    序列化和反序列化

    序列化:是将对象的状态写入到特定的流中的过程

    反序列化:则是从特定的流中获取数据重新构建对象的过程

    序列化步骤:

    1.实现SeriaLizable接口

    2.创建对象输出流

    3.调用writeObject()方法将对象写入文件

    4.关闭对象输出流

    注意:

    使用集合保存对象,可以将集合中的所有对象序列化

    反序列化步骤:

    1.实现SeriaLizable接口

    2.创建对象输入流

    3.调用readObject()方法将对象写入文件

    4.关闭对象输出流

    注意:

    如果向文件中使用序列化机制写入多个对象,那么反序列化恢复对象时,必须按照写入的顺序读取

  • 相关阅读:
    HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(二)
    《QEMU/KVM源码分析与应用》读书笔记2 —— 第一章 QEMU与KVM概述
    刷题用到的非常有用的函数c++(持续更新)
    Pytorch学习笔记4
    【数据结构】单链表
    八月开始备考MBA/MPA/MEM,慌不慌?
    Zookeeper的api使用
    想创建一个人名百度百科词条,但已经有相同重复的词条怎么办
    【768. 最多能完成排序的块 II】
    cs与msf联动
  • 原文地址:https://blog.csdn.net/lmdbhf/article/details/126497346