当前位置: 首页 > news >正文

java基础——IO流

目录

1. 文件与常见文件操作

1.1 文件概念

1.2 常见文件操作

2. Java IO 流原理及分类

2.1 原理

2.2 分类

3. 基本流类介绍

3.1 FileInputStream

3.2 FileOutputStream

3.3 FileReader

​编辑

3.4 FileWriter

​编辑

4. 节点流和处理流

4.1 节点流

4.2 处理流(包装流)

4.3 节点流和处理流的区别和联系

5. 打印流

5.1 PrintStream 和 PrintWriter

6. Properties 类


1. 文件与常见文件操作

1.1 文件概念

在计算机中,文件是存储在存储设备(如硬盘、U 盘等)上的数据集合,可以是文本文件(如 .txt.java)、二进制文件(如 .jpg.mp3)等。大家经常使用的word文档,txt文件、excel文件...都是文件。

文件在程序中是以流的形式操作的

1.2 常见文件操作

创建文件对象相关构造器和方法

new File(String pathname) //根据路径构建一个File对象
new File(File parent,String child)//根据父目录文件+子路径构建
new File(String parent,String child)//根据父目录+子路径构建

文件创建、获取文件的信息、删除

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

public class FileExample {
    public static void main(String[] args) {
        // 创建一个 File 对象,指向一个文件
        File file = new File("test.txt");

        try {
            // 创建新文件
            if (file.createNewFile()) {
                System.out.println("文件创建成功");
            } else {
                System.out.println("文件已存在");
            }

            // 获取文件信息
            System.out.println("文件名称: " + file.getName());
            System.out.println("文件路径: " + file.getAbsolutePath());
            System.out.println("文件大小: " + file.length() + " 字节");

            // 删除文件
            if (file.delete()) {
                System.out.println("文件删除成功");
            } else {
                System.out.println("文件删除失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. Java IO 流原理及分类

2.1 原理

Java IO 流是一种用于处理输入输出的机制,它通过流的方式将数据从一个源(如文件、网络连接等)传输到另一个目标(如另一个文件、控制台等)。可以把流想象成一个管道,数据在管道中流动。

2.2 分类
  • 按数据流向分
    • 输入流:用于从数据源读取数据到程序中。
    • 输出流:用于将程序中的数据写入到目标位置。
  • 按处理数据的单位分
    • 字节流:以字节(8 位)为单位处理数据,适合处理二进制数据。
    • 字符流:以字符(16 位)为单位处理数据,适合处理文本数据。

3. 基本流类介绍

3.1 FileInputStream

FileInputStream 是字节输入流,用于从文件中读取字节数据。

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("test.txt")) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
3.2 FileOutputStream

FileOutputStream 是字节输出流,用于将字节数据写入到文件中。

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExample {
    public static void main(String[] args) {
        String content = "Hello, Java IO!";
        try (FileOutputStream fos = new FileOutputStream("test.txt")) {
            byte[] bytes = content.getBytes();
            fos.write(bytes);
            System.out.println("数据写入成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
3.3 FileReader

FileReader 是字符输入流,用于从文件中读取字符数据。

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

public class Filereader {
    public static void main(String[] args) throws IOException {
        String filePath = "d://news1.txt";
        String fileOut = "d://news2.txt";
        FileReader fileReader = new FileReader(filePath);
        FileWriter fileWriter = new FileWriter(fileOut);
        int readLen = 0;
        char[] buf = new char[8];
        while((readLen = fileReader.read(buf)) != -1){
            fileWriter.write(buf,0,readLen);
        }
        fileWriter.close();
        fileReader.close();
    }
}
3.4 FileWriter

FileWriter 是字符输出流,用于将字符数据写入到文件中。

import org.junit.jupiter.api.Test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Fileoutputstream {
    @Test
    public void WriteFile(){
        String filePath = "d://news2.txt";
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(filePath);
            String str = "hello韩顺平";
            fileOutputStream.write(str.getBytes(StandardCharsets.UTF_8));
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();//文件流关闭
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

4. 节点流和处理流

4.1 节点流

节点流是直接与数据源或目标相连的流,如 FileInputStreamFileOutputStreamFileReaderFileWriter 等,它们可以直接从文件、内存等数据源读取或写入数据。

4.2 处理流(包装流)

处理流是对节点流进行包装的流,它可以增强节点流的功能,如提供缓冲、转换等功能。例如 BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter 等。

分类字节处理流字节输出流字符输入流字符输出流
抽象基类InputStreamOutputStreamReaderWriter
访问文件FileInputStreamFileOutputStreamFileReaderFileWriter
访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
访问管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
转换流InputStreamReaderOutputStreamWriter
对象流ObjectInputStreamObjectOutputStream
抽象基类FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
打印流PrintStreamPrintWriter
推回输入流PushbackInputStreamPushbackReader
特殊流DataInputStreamDataOutputStream

4.3 节点流和处理流的区别和联系
  1. 节点流是底层流/低级流, 直接和数据源相接
  2. 处理流包装节点流, 既可以消除不同节点流之间的实现差异, 也可以提供更方便的方法来完成输入输出
  3. 处理流对节点流进行包装,使用了修饰器设计模式, 不会直接与数据源相连

示例:使用 BufferedInputStream 和 BufferedOutputStream 复制文件

import java.io.*;

public class BufferedStreamExample {
    public static void main(String[] args) {
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"));
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, bytesRead);
            }
            System.out.println("文件复制成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 打印流

5.1 PrintStream 和 PrintWriter

打印流提供了方便的打印方法,如 print()println() 等。PrintStream 是字节打印流,PrintWriter 是字符打印流。

示例:使用 PrintWriter 写入数据到文件

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

public class PrintWriterExample {
    public static void main(String[] args) {
        try (PrintWriter pw = new PrintWriter(new FileWriter("test.txt"))) {
            pw.println("Hello, PrintWriter!");
            pw.print("This is a test.");
            System.out.println("数据写入成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. Properties 类

Properties 类是 Hashtable 的子类,用于处理属性文件,属性文件通常以 .properties 为扩展名,文件内容以键值对的形式存储。

示例:读取和写入属性文件

import java.io.*;
import java.util.Properties;

public class PropertiesExample {
    public static void main(String[] args) {
        Properties properties = new Properties();

        // 写入属性文件
        try (FileOutputStream fos = new FileOutputStream("config.properties")) {
            properties.setProperty("username", "admin");
            properties.setProperty("password", "123456");
            properties.store(fos, "Configuration");
            System.out.println("属性文件写入成功");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取属性文件
        try (FileInputStream fis = new FileInputStream("config.properties")) {
            properties.load(fis);
            String username = properties.getProperty("username");
            String password = properties.getProperty("password");
            System.out.println("Username: " + username);
            System.out.println("Password: " + password);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

通过以上内容,你可以对 Java IO 流有一个较为全面的了解,包括文件操作、流的原理和分类、基本流类的使用、节点流和处理流、打印流以及 Properties 类的应用。

相关文章:

  • 对界面简单易用封装SDK
  • 动态多线程算法概述
  • 重新出发的LLM本地部署——DeepSeek加持下的Ollama+OpenWebUI快速部署
  • 【自学笔记】计算机视觉基础知识点总览-持续更新
  • 基于Python豆瓣电影数据可视化分析系统的设计与实现
  • 核货宝外贸订货系统:批发贸易企业出海的强劲东风
  • 【Rust中级教程】1.9. 所有权(简单回顾):所有权的核心思想、如何实现`Copy` trait、值的删除(丢弃)、值删除的顺序
  • 第1章大型互联网公司的基础架构——1.6 RPC服务
  • python利用jenkins模块操作jenkins
  • 七、Java常用API(2)
  • [特殊字符] C语言中打开和关闭文件的两种方法:标准库 VS 系统调用
  • layui怎么请求数据
  • 红队视角出发的k8s敏感信息收集——日志与监控系统
  • 【机器学习】向量化使得简单线性回归性能提升
  • 计算机网络知识速记 HTTPS的工作流程
  • 《Stable Diffusion绘画完全指南:从入门到精通的Prompt设计艺术》 第六章
  • Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1
  • Unity Shader示例 6: 卡渲基础 - 描边 + 着色
  • 地基Spring中bean生命周期和设计模式
  • 介绍cherrypick
  • 马上评丨机械停车库成“僵尸库”,设计不能闭门造车
  • 视觉周刊|2025上海车展的科技范
  • 人民时评:投资于人,促高质量充分就业
  • 魔都眼·上海车展⑥|周六客流超13.5万人次,创开展新高
  • 视频丨伊朗阿巴斯港一处油罐发生高强度爆炸:造成大面积破坏,伤亡不明
  • 新希望去年归母净利润4.74亿同比增逾九成,营收降27%