7Java File类、I/O流

文章目录

  • File类 (表示文件)
  • I/O 输入和输出
    • 1、字节流和字符流
        • 节点流和处理流
    • 2、Print 打印流
    • 3、Object 对象输入、输出流
        • serializable:序列化接口

File类 (表示文件)

​ 要在java程序中操作硬盘上的文件,首先要在程序中表示一个对应的文件。那如何在程序中表示文件?——File类

​ 一个File类的对象表示硬盘上的一个文件或目录(文件夹)

​ 操作方法:

  1. 判断功能
  2. 获取功能
  3. 创建、删除功能

File类只能表示文件,不能对文件进行 读写,那如何读写文件——File类中的 I(input ) / 0(output)

需求:要把 D:/demo.txt ----> E:/demo.txt

通过read方法读:
7Java File类、I/O流_第1张图片
通过write方法写:
7Java File类、I/O流_第2张图片

//需求:要把 D:/demo.txt  ----> E:/demo.txt

//创建一个输入流管道,为其指定输入的文件
FileInputStram in = new FileInputStream(new File(pathname:"D:/demo.txt"));

//创建一个输出流管道,为其指定输出的文件,输入文件可以不存在,会自动创建
FileInputStram in = new FileInputStream(new File(pathname:"E:/demo.txt"));

//int b = in.read;//从文件中读数据,一次读一个字节,文件读完后返回-1 通过循环读
int b  = 0;
while(b = in.read()!= -1){
    //System.out.println(b);
    out.write(b);
}

in.close();//关闭流通道,释放文件
out.close();

​ 加入异常处理:

package com.ffyc.javaio.Stream;

import java.io.*;

public class StreamDemo3 {
    public static void main(String[] args) throws IOException {
        /*
            需求:把 D:/demo1.txt -读到-> C:/demo1.txt
               read() ——> write(b)
               read(byte[] b) ——> write(b,off,len)
        */
        FileInputStream in = new FileInputStream(new File("D:/demo1.txt"));
        FileOutputStream out = new FileOutputStream(new File("C:/demo1.txt"));

        //read() 一次只读取一个字节,并返回结果 a-97,读完返回-1  效率低
        //read(byte[] b) 一次读取一个byte数组个字节内容,返回数组中实际装入内容的长度,读完返回-1
        //44个字节 数组长度是10  读5次
        byte[] b = new byte[10]; //50 44
        int size = 0; //实际向数组中读到的内容长度,主要是最后一次的实际数量
        while((size = in.read(b))!= -1){
//            out.write(b);//这样写出来长度是50,写入后文件长度变大了,不行,人家实际是44
            out.write(b, 0, size);//这样写出来就是44
            // write(装内容的数组,数组的第0个位置开始,size实际写出的长度) 最后一次只有4个字节,向外只写4个即可
        }
        in.close();
        out.close();
    }
}

7Java File类、I/O流_第3张图片

I/O 输入和输出

1、字节流和字符流

按照读写单位分为:字节流和字符流

1)字节流:一次读写一个字节

使用的多

主要用在: 图片,视频,音频,等文件…

字节输入流:从硬盘向程序中读数据 InputStream

字节输出流:从程序中向硬盘上写数据 OutputStream

7Java File类、I/O流_第4张图片

节点流和处理流

根据封装类型不同分为:节点流和处理流

节点流:

流对象中封装的是数据源,直接用来读文件

FileInputStream、FileOutputStream

处理流:

流对象中包含的是 流对象,可以提供一些操作功能

提供缓冲功能:BufferInputStream、BuffergOutputStream

ObjectInputStream、ObjectOutputStream

2)**字符流:一次读写一个字符 **

主要用在:只能读纯文本文件 :txt 、java 、c

字符输入流 :

Reader

InputStreamReader :转换流 ,把原始的字节转为字符 将一个中文的三个字节转换为一个字符编码

FileReader

字符输出流:

Writer

OutputStreamWirter :转换流

FileWirter

**字符处理流:**提供对数据的缓存功能 BufferedReader\ BufferedWirter

2、Print 打印流

没有输入,只是从程序中向外输出

PrintStream 打印字节流

PrintWriter 打印字符流 单向从服务器向客户端浏览器响应数据,javaEE中用

package com.ffyc.javaio;

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

public class PrintDemo {

    public static void main(String[] args) throws FileNotFoundException {

        /*
           打印字符流, 单向从服务器端向客户端浏览器响应数据.  javaEE时需要使用
         */
        PrintWriter p = new PrintWriter("E:/demo.html");
                    p.println("

你好世界

"
); p.println("

你好世界

"
); p.close(); } }

3、Object 对象输入、输出流

​ 即对象序列化和对象反序列化

​ 对象序列化:把对象信息读写到一个文件中

​ 对象反序列化:对象输入流 读取文件中的对象信息

​ 就是把程序运行时所产生的的对象信息(内存中存储) 输入到一个文件中(实现对象信息的持久化保存),称为对象序列化

例如:系统需要升级,就要停止服务器,可以将一些对象保存到硬盘中,升级完后,服务器启动,从文件中读取信息。

​ 从文件中,将对象信息读取到内存中,称为反序列化。(也是java中创建对象的一种方式)

serializable:序列化接口

​ 一旦一个类的对象,需要序列化,那么此类必须实现序列化接口

​ 为该类默认生成一个版本号

面试中问:要新建一个对象的方式?

答:new 对象反序列化…

你可能感兴趣的:(java,intellij-idea,java-ee)