欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 常用IO流学习整理

程序员文章站 2022-04-03 19:35:17
...

java 常用IO流学习整理

File类
1:File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
2:demo


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

/**
 * 文件的读取与修改
 */
public class demo1 {

    public static void main(String[] args) throws IOException {
        File dir1 = new File("F:/demo1/dir1");
        if (!dir1.exists())          //当不存在该路径时则自动创建
            dir1.mkdir();
        else
            System.out.println("文件夹已经存在");
        File dir2 = new File(dir1, "dir2");
        if (!dir2.exists())              //如果仍旧不存在,则继续创建
            dir2.mkdir();
        else
            System.out.println("子文件夹已经存在");
        File dir4 = new File(dir1, "dir3/dir4");        //在dir1下创建一个文件目录
        if (!dir4.exists())
            dir4.mkdirs();
        else
            System.out.println("文件目录已经存在");
        File file = new File(dir2, "xiaoming.txt"); // 创建以dir2为父目录,名为"xiaoming.txt"的File对象
        if (!file.exists())                           // 如果还不存在,就创建
            file.createNewFile();
        else {
            System.out.println("该文件已经存在");
            System.out.println("文件名:" + file.getName() + "  文件路径:" + file.getPath() + "  文件父目录" + file.getParent());
            file.delete();
        }
        file = new File("F:/demo1/dir1");
        File files[] = file.listFiles();
        for (File f : files)
            System.out.println(f.getName());            //获取文件夹下的所有子文件
    }
}
/*
文件夹已经存在
子文件夹已经存在
文件目录已经存在
该文件已经存在
文件名:xiaoming.txt  文件路径:F:\demo1\dir1\dir2\xiaoming.txt  文件父目录F:\demo1\dir1\dir2
dir2
dir3
 */

IO 流原理
1:这里的输入输出流要分清,输入流指的是从源文件到程序,而输出流指的是从程序到目标文件
java 常用IO流学习整理
java 常用IO流学习整理
2:这里输入输出流按输入类型可分为两类,字节流(8 bit),字符流(16 bit) ,字节流以byte为单位传输,字符流以char为单位传输
java 常用IO流学习整理
3:这里的IO流种类虽然非常多,但是都是基于以上四个基类派生的
java 常用IO流学习整理

文件流
写入文件FileWriter
1:demo

import java.io.FileWriter;
import java.io.IOException;

public class demo2 {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("F:\\demo1\\dir1\\dir2\\xiaoming.txt");//文件不存在会自动创建
        fw.write("my name id XiaoMing1");
        //fw.flush();         //注意一定要刷新才能写入
        fw.close();            //如果不刷新,直接关闭也会写入,this.writeBytes();这是因为底层源码都执行了  if (this.bb.position() > 0) {this.writeBytes()}; 最终将程序中的内容输出了
    }
}

读取文件FileReader
1:demo

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

public class demo2 {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("F:\\demo1\\dir1\\dir2\\xiaoming.txt");//前提保证文件存在
        char[] buf = new char[1024];            //创建一个缓存数组
        int len = 0;
        while ((len = fr.read(buf)) != -1) {
            System.out.println(new String(buf, 0, len));
        }
        fr.close();
    }
}
//my name id XiaoMing1

缓冲流
1:为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
2:demo

import java.io.*;

public class demo2 {
    public static void main(String[] args) throws IOException {
        String str = null;
        BufferedReader br = new BufferedReader(new FileReader("F:\\demo1\\dir1\\dir2\\xiaoming.txt"));
        System.out.println(br.readLine());
        while ((str = br.readLine()) != null) {       //一次读入一行
            System.out.println(str);
        }
        br.close();
        BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\demo1\\dir1\\dir2\\xiaoming.txt"));
        bw.write("First\n");
        bw.newLine();           //换行
        bw.write("Second");
        bw.flush();
        bw.close();
    }
}
//my name id XiaoMing1

本文参考该博客撰写:https://www.cnblogs.com/baixl/p/4170599.html