Java IO、File类、输入及输出的概念、输入流与输出流、字节流与字符流、输入输出节点字节流、节点流与处理流、输入输出节点字符流、Print流、对象输入输出流--对象序列化

IO

1.File类

  • File类是java.io包中的类
  • File类的对象可以表示文件,还可以表示目录,再程序中一个File类对象可以表示代表一个文件或目录。
  • File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等。
  • File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。

File类的构造方法

​ File(String pathname) 指定文件(或目录)名和路径创建

//在当前目录下创建一个与aaa.txt文件名相关联的文件对象
File f1 = new Fi
//指明详细的路径以及文件名,请注意双斜线或用反斜杠
File f2 = new File("D:\\Java\\Hello.java");
//指明详细的路径以及目录名,请注意双斜线
File f3 = new File("D:\\Java")

在这里插入图片描述

样例:

import java.io.File;
import java.io.IOException;
import java.util.Date;
    //File类 在程序中抽象的表示计算机中的文件和目录(文件夹)
    //File类 对象可以表示一个具体的文件或目录
    //File对象只表示文件,不能对内容进行读写
public class FileDemo {
    public static void main(String[] args) {
        File f2 = new File("E:\\Demo.txt");
        File f9 = new File("Demo1.txt");
        System.out.println(f9.getAbsoluteFile());
        try {
            f2.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(f2.canRead());
        System.out.println(f2.canWrite());
        System.out.println(f2.exists());
        System.out.println(f2.getName());
        System.out.println(f2.getParent());
        System.out.println(f2.isFile());
        File f4 = new File("E:\\Demo1.txt");
        System.out.println(f4.getAbsoluteFile());   //绝对路径
        System.out.println(f4.getParent());         //父类路径
        System.out.println(f4.lastModified());
        System.out.println(f4.getParentFile());
        System.out.println(new Date(1657501836220L));
        System.out.println(f4.length());
        if(!f4.exists()){
            try {
                f4.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println(f2.delete());

        File f1 = new File("E:\\io");
        f1.mkdir();
        File f5 = new File("E:\\io\\io1\\io2");
        //f5.mkdirs();
        f5.delete();
    }
}

2.输入及输出的概念

​ 输入输出(I/O)把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据的read操作从程序往外部设备写数据,称为输出,即output,进行数据的write操作。

输入输出相对于程序
在这里插入图片描述

3.输入流与输出流

​ 流按着数据的传输方向分为:

输入流:往程序中读叫输入流。
输出流:从程序中往外写叫输出流。

​ InputStream和OutputStream的子类都是字节流可以读写二进制文件,主要处理音频、图片、歌曲、字节流,处理单元为1个字节。

​ Reader和Writer的子类都是字符流 主要处理字符或字符串,字符流处理单元为1个字符。字符流将读取到的字节数据,取指定的编码表中获取对应的文字。

4.字节流与字符流

字节流

​ 概念:每次读取数据时,是以字节为单位,一次读一个字节(可以读取任何文件)

​ 字节流中常用类

​ 字节输入流 FileInputStream

​ 字节输出流 FileOutputStream

package com.dkc.javaio.stream;

import com.sun.xml.internal.ws.addressing.WsaActionUtil;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class StreamDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream f1 = null;
        FileOutputStream  f2 = null;
        try {
            f1 = new FileInputStream("E:/Demo1.txt");
            f2 = new FileOutputStream("F:/Demo1.txt");
            byte [] b = new byte[5];
            int size =0;
            while((size=f1.read(b))!=-1){
                System.out.println(size);
                f2.write(b,0,size);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println(e.getMessage()); //打印日志
        }finally {
            if(f1!=null){
                f1.close();
            }
            if(f2!=null){
                f2.close();
            }
        }
    }
}

字符流

​ 概念:每次读取数据时,是以字符为单位,一次读一个字符(只适合读文本文件)

​ 字符流常用类

​ 字符输入流 FileReader

​ 字符输出流 FileWriter

package com.dkc.javaio.reader;

import java.io.*;

public class ReaderDemo {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("E:/Demo.txt");
        FileWriter fw = new FileWriter("E:/Demo2.txt",true);
        BufferedReader bufferedReader = new BufferedReader(fr);
        BufferedWriter bufferedWriter = new BufferedWriter(fw);

       String line=null;

        while((line=  bufferedReader.readLine())!=null){
            bufferedWriter.newLine();
            bufferedWriter.write(line);

        }
        bufferedWriter.flush();
        bufferedReader.close();
        bufferedWriter.close();
    }

5.输入输出节点字节流

InputStream的基本方法

​ 读取一个字节并以整数的形式返回(0-255),如果返回-1已到输入流的末尾。

​ int read() throws IOException

​ 读取一系列字节并储存到一个数组buffer, 返回实际读取的字节数,如果读取前已到输入流的末尾返回-1

​ int read(byte[] buffer) throws IOException

​ 关闭流释放内存资源

​ void close() throws IOException

​ OutputStream的基本方法

​ 向输出流中写入一个字节数据,该字节数据为参数b的低8位

​ void write(int b) throws IOException

​ 将一个字节类型的数组中的从指定位置(off) 开始的len个字节写入到输出流

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

​ 关闭流释放内存资源

​ void close() throws IOException

6.节点流与处理流

​ 根据封装类型分为:

节点流

​ 如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。

处理流

​ 如果流封装的是其他流对象,称为处理流。处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法

​ 字节流中常用类

​ 字节输入流 FileInputStream

​ 字节输出流 FileOutputStream

​ 字符输入流 FileReader

​ 字符输出流 FileWriter

​ 处理流中常用类

​ 缓冲字节输出流 BufferedOutputStream

​ 缓冲字节输入流 BufferedInputStream

​ 缓冲字符输入流 BufferedReader

​ 缓冲字符输出流 BufferedWriter

package com.dkc.javaio.homeworkT;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class iu {
    public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
    //创建对象输入流,进行序列化
    //创建保存用户信息的文件
        FileWriter fw=new FileWriter("D:/w.txt",true);
//设置为追加模式
        BufferedWriter bw=new BufferedWriter(fw);
        System.out.println("输入账号");
        String Username=sc.next();
        System.out.println("输入密码");
        String password=sc.next();
        String res=Username+"="+password;
        bw.write(res);
        bw.newLine();
        bw.flush();
    bw.close();


    }
}

7.输入输出节点字符流

​ Reader的基本方法

​ 读取一个字符并以整数的形式返回,如果返回-1已到输入流的末尾。

​ int read() throws IOException

​ 读取一系列字符并储存到一个数组buffer,返回实际读取的字符数,如果读取前已到输入流的末尾返回-1

​ int read(char[] cuf) throws IOException

​ 关闭 void close() throws IOException

​ Writer的基本方法

​ 向输出流中写入一个字符数据,该字节数据为参数b的16位

​ void write(int c) throws IOException

​ 一个字符类型的数组中从指定位置(off set) 开始的length个字符写入到输出流

​ void write(char[] cbuf,int off set,int length) throws IOException

​ 关闭void close() throws IOException

8.Print流

​ print打印流

​ 只做输出没有输入 打印流分为字节打印流和字符打印流

​ PrintWriter:

​ 字符打印流 print方法可以打印各种类型数据

​ 在Javaweb项目中,服务器端向客户端响应数据以打印流的方式响应。

package com.dkc.javaio.print;

import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class PrintDemo {
    public static void main(String[] args) throws FileNotFoundException {
        //打印流:单向的从程序中向目标输出数据

        PrintWriter pw = new PrintWriter("E:/Demo.html");
        pw.print("<h1>Print流</h1>");
        pw.close();
    }
}

9.对象输入输出流–对象序列化

  • 对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。

  • 对象的输入输出流:

    主要的作用是用于写入对象信息与读取对象信息。对象信息 一旦写道文件上那么对象的信息就可以做到持久化了。

    对象的输出流:ObjectOutputStream

    对象的输入流:ObjectInputStream

  • 在ObjectInputStream 中用readObject()方法可以直接读取一个对象ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中。

  • 对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程。

  • 对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程。

  • 对象的输出流将对象写入到文件中称为对象的序列化,所以被序列化对象的类必须要实现Serializable接口。Serializable接口中没有任何方法。当一个类声明实现Serialiable接口后,表明该类可被序列化。在类中可以生成一个编号

    private static final long serial VersionUID = -5974713180104013488L;

  • 随机生成唯一的serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化。

  • 如果不显示生成序列号,那么将会隐式生产,但是隐式生成后,类一旦发生改变,序列号也会随之改变。

  • idea中设置,在类中生成序列化id

进入setting->inspections->serialization issues->选择图中的选项。

在这里插入图片描述
在这里插入图片描述
transient关键词

默认情况下当执行了对象序列化的时候会将类中的全部属性的内容进行全部的序列化操作,但是很多情况下有一些属性可能并不需要序列化的处理,这个时候就可以在属性的定义上使用transient关键词来完成了。

​ private transient String name;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁢⁢Mrx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值