Java进阶--IO流

一、File类

概念:代表物理盘符中的一个文件或者文件夹。

常见方法

方法名

描述

createNewFile()

创建个新件。

mkdir()

创建个新录。

delete()

删除件或空录。

exists()

判断File对象所对象所代表的对象是否存在

getAbsolutePath()

获取件的绝对路径

getName()

获取文件名

getParent()

获取件/录所在的录

isDirectory()

是否是录。

isFile()

是否是件

length()

获得件的度。

listFiles()

列出录中的所有内容。

代码示例:

复制代码
    public static void main(String[] args) throws IOException {
        // 文件的相关操作
        File f = new File("D:\dahe\1.txt");
        System.out.println("?件绝对路径:" + f.getAbsolutePath());
        System.out.println("?件构造路径:" + f.getPath());
        System.out.println("?件名称:" + f.getName());
        System.out.println("?件?度:" + f.length() + "字节");


        //创建?件 createNewFile()
        File file = new File("d:\dahe\file.txt");
        //System.out.println(file.toString());
        if (!file.exists()) {
            boolean b = file.createNewFile();
            System.out.println("创建结果:" + b);
        }
        System.out.println("是否是?件:" + file.isFile());


        //?件夹的相关操作
        File f2 = new File("D:\dahe");
        System.out.println("?录绝对路径:" + f2.getAbsolutePath());
        System.out.println("?录构造路径:" + f2.getPath());
        System.out.println("?录名称:" + f2.getName());
        System.out.println("?录?度:" + f2.length());
        //创建?件夹
        File dir = new File("D:\dahe\bbb\ccc");
        System.out.println(dir.toString());
        if (!dir.exists()) {
            //dir.mkdir();//只能创建单级?录
            System.out.println("创建结果:" + dir.mkdirs());//创建多级?录
        }
        System.out.println("是否是?件夹:" + dir.isDirectory());
        //遍历?件夹
        File dir2 = new File("D:\dahe");
        String[] files = dir2.list();
        System.out.println("--------------------------------");
        for (String string : files) {
            System.out.println(string);
        }
    }

代码运行结果:

FileFilter 件过滤器接:

boolean accept(File pathname)。

当调File类中的listFiles()法时,持传FileFilter接接实现类,对获取件进过滤,只有满条件的件的才可出现在listFiles()的返回值中。

复制代码
   public static void main(String[] args) {
        File dir = new File("d:\dahe");
        printDir(dir);
    }

    public static void printDir(File dir) {
        // 匿名内部类?式,创建过滤器?类对象
        File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".java") || pathname.isDirectory();
            }
        });
        // 循环打印
        for (File file : files) {
            if (file.isFile()) {
                System.out.println("?件名:" + file.getAbsolutePath());
            } else {
                printDir(file);
            }
        }
    }

二、什么是IO

我们把数据的传输,可以看做是种数据的流动,按照流动的向,以内存为基准,分为输input 和输出output ,即流向内存是输流,流出内存的输出流。

Java中I/O操作主要是指使java.io包下的内容,进输、输出操作。输也叫做读取数据,输出也叫做作写出数据。

三、IO分类

1、根据数据的流向分为:输流和输出流。

输流 :把数据从其他设备上读取到内存中的流。
输出流 :把数据从内存 中写出到其他设备上的流。

2、根据数据的类型分为:字节流和字符流。

字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流。

四、字节流

切皆为字节。

切件数据(本、图、视频等)在存储时,都是以进制数字的形式保存,都个个的字节,那么传输时样如此。所以,字节流可以传输任意件数据。在操作流的时候,我们要时刻明确,论使什么样的流对象,底层传输的始终为进制数据。

字节输出流

FileOutputStream类

public FileOutputStream(File file):创建件输出流以写由指定的 File对象表示的件。

public FileOutputStream(String name): 创建件输出流以指定的名称写件。

1、写出字节 :write(int b) 法,每次可以写出个字节数据
2、写出字节数组 :write(byte\[\] b),每次可以写出数组中的数据
3、写出指定度字节数组 :write(byte\[\] b, int off, int len) ,每次写出从off索引开始,len个字节

示例:

复制代码
public static void main(String[] args) throws IOException {
        // 使?File对象创建流对象
        File file = new File("a.txt");
        FileOutputStream fos = new FileOutputStream(file);
         // 使??件名称创建流对象
        FileOutputStream fos1 = new FileOutputStream("b.txt");
        // 使??件名称创建流对象
       // FileOutputStream fos2 = new FileOutputStream("fos.txt");
         // 写出数据:虽然参数为int类型四个字节,但是只会保留?个字节的信息写出
        fos.write(97); // 写出第1个字节
        fos.write(98); // 写出第2个字节
        fos.write(99); // 写出第3个字节
        // 关闭资源
        fos.close();
        // 使??件名称创建流对象
        FileOutputStream fos2 = new FileOutputStream("fos.txt");
        // 字符串转换为字节数组
        byte[] b = "你好中国".getBytes();
        // 写出字节数组数据
        fos2.write(b);
        // 关闭资源
        fos2.close();
        // 使??件名称创建流对象
        FileOutputStream fos3 = new FileOutputStream("fos.txt");
        // 字符串转换为字节数组
        byte[] b1 = "abcde".getBytes();
        // 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
        fos3.write(b1,2,2);
        // 关闭资源
        fos3.close();
    }

字节输流

FileInputStream类

构造法:

FileInputStream(File file): 通过打开与实际件的连接来创建个 FileInputStream ,该件由件系统中的 File对象 file命名。

FileInputStream(String name): 通过打开与实际件的连接来创建个 FileInputStream ,该件由件系统中的路径名 name命名。

1、读取字节 :read法,每次可以读取个字节的数据,提升为int类型,读取到件末尾,返回-1。
2、使字节数组读取 :read(byte\[\] b),每次读取b的度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1。

示例:

复制代码
 public static void main(String[] args) throws IOException {
        // 使?File对象创建流对象
        File file = new File("a.txt");
        FileInputStream fos = new FileInputStream(file);
        // 使??件名称创建流对象
        FileInputStream fos1 = new FileInputStream("b.txt");
        // 使??件名称创建流对象
        FileInputStream fis = new FileInputStream("read.txt");
        // 读取数据,返回?个字节
        int read = fis.read();
        System.out.println((char) read);
        read = fis.read();
        System.out.println((char) read);
        read = fis.read();
        System.out.println((char) read);
        read = fis.read();
        System.out.println((char) read);
        read = fis.read();
        System.out.println((char) read);
        // 读取到末尾,返回-1
        read = fis.read();
        System.out.println(read);
        // 关闭资源
        fis.close();
        // 使??件名称创建流对象
        FileInputStream fis1 = new FileInputStream("read.txt");
        // 定义变量,保存数据
        int b;
        // 循环读取
        while ((b = fis1.read()) != -1) {
            System.out.println((char) b);
        }
        // 关闭资源
        fis1.close();
        // 使??件名称创建流对象.
        FileInputStream fis2 = new FileInputStream("read.txt"); // ?件中为abcde
        // 定义变量,作为有效个数
        int len;
        // 定义字节数组,作为装字节数据的容器
        byte[] b1 = new byte[2];
        // 循环读取
        while ((len = fis2.read(b1)) != -1) {
            // 每次读取后,把数组的有效字节部分,变成字符串打印
            System.out.println(new String(b1, 0, len));// len 每次读取的有效字节个数
        }
        // 关闭资源
        fis2.close();
    }

图片复制功能:

复制代码
public static void main(String[] args) throws IOException {
        //1创建流
        //1.1?件字节输?流
        FileInputStream fis=new FileInputStream("d:\001.jpg");
        //1.2?件字节输出流
        FileOutputStream fos=new FileOutputStream("d:\002.jpg");
        //2?边读,?边写
        byte[] buf=new byte[1024];
        int count=0;
        while((count=fis.read(buf))!=-1) {
            fos.write(buf,0,count);
        }
       //3关闭
        fis.close();
        fos.close();
        System.out.println("复制完毕");

    }
相关推荐
Scott9999HH4 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔4 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海5 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区8 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大8 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai9 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说9 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json