Java文件与IO流操作原理详细分析

Java文件与IO流操作原理详细分析

什么是IO流

Java中的IO流是用来处理输入和输出的流。IO流可以分为两种类型:字节流和字符流。它们之间的区别在于字节流以字节为单位进行操作,而字符流以字符为单位进行操作。不管是哪种类型的流,都分为输入流和输出流。输入流用于从文件中读取数据,输出流用于将数据写入到文件中。在Java IO流中,InputStream和Reader是用来读取数据的核心类,而OutputStream和Writer是用来将数据写入到文件中的核心类。

Java文件操作

在Java中,文件操作是通过File类来实现的。File类提供了很多方法来创建、读取和写入文件。下面是常用的File类方法:

  • File(String pathname):传递文件路径参数,创建一个File对象。
  • boolean createNewFile():创建一个新的空文件,如果文件存在则不创建。
  • boolean mkdir():创建一个新的空目录,如果目录存在则不创建。
  • boolean delete():删除一个空文件或目录。
  • boolean exists():判断文件或目录是否存在。
  • String[] list():返回一个包含此目录中所有文件和子目录的字符串数组。
  • File[] listFiles():返回一个包括此目录中所有文件和子目录的File数组。
  • long lastModified():返回文件或目录最后修改的时间。

下面是一个创建文件并写入数据的示例:

import java.io.*;

public class FileDemo {

    public static void main(String[] args) {
        try {
            String fileName = "demo.txt";
            File file = new File(fileName);
            if (file.createNewFile()) {
                System.out.println("File created: " + file.getName());
                FileWriter writer = new FileWriter(fileName);
                writer.write("Hello World");
                writer.close();
                System.out.println("Successfully wrote to the file.");
            } else {
                System.out.println("File already exists.");
            }
        } catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

IO流操作

字节流

Java IO流提供了许多字节流来处理二进制数据,其中最基础的字节流是InputStream和OutputStream。InputStream用于从输入流中读取字节,OutputStream用于将字节写入输出流中。下面是常用的InputStream和OutputStream方法:

  • int read(byte[] b):从输入流中读取数据并返回读取的数据的长度。
  • void write(byte[] b):将指定数组中的字节写入输出流中。
  • void flush():将缓冲区中的数据刷新到输出流中,保证数据完整性。
  • void close():关闭输入/输出流。

下面是一个读取文件并输出内容的示例:

import java.io.*;

public class InputStreamDemo {

    public static void main(String[] args) {
        try {
            File file = new File("demo.txt");
            FileInputStream inputStream = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            int length = inputStream.read(buffer);
            System.out.println(new String(buffer, 0, length));
            inputStream.close();
        } catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

字符流

除了字节流以外,Java IO流还提供了许多字符流来处理文本数据,其中最基础的字符流是Reader和Writer。Reader用于从输入流中读取字符,Writer用于将字符写入输出流中。下面是常用的Reader和Writer方法:

  • int read(char[] cbuf):从输入流中读取数据并返回读取的数据的长度。
  • void write(char[] cbuf):将指定数组中的字符写入输出流中。
  • void flush():将缓冲区中的数据刷新到输出流中,保证数据完整性。
  • void close():关闭输入/输出流。

下面是一个从控制台输入并输出到文件的示例:

import java.io.*;

public class WriterDemo {

    public static void main(String[] args) {
        try {
            File file = new File("output.txt");
            if (file.createNewFile()) {
                System.out.println("File created: " + file.getName());
            } else {
                System.out.println("File already exists.");
            }
            FileWriter writer = new FileWriter(file);
            BufferedWriter bufferedWriter = new BufferedWriter(writer);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                bufferedWriter.write(line);
                bufferedWriter.newLine();
            }
            bufferedReader.close();
            bufferedWriter.close();
            System.out.println("Successfully wrote to the file.");
        } catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java文件与IO流操作原理详细分析 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JAVA中String类与StringBuffer类的区别

    String类和StringBuffer类都是Java中经常使用的字符串类,它们都可以用于处理字符串,但是它们之间有很大的区别。下面详细讲解一下它们之间的区别: 1.可变性 String类是不可变的类,也就是说,一旦字符串被创建,就无法更改它的值。如果尝试更改字符串的值,则会新建一个字符串。 StringBuffer类是可变的,它可以更改其内容,而不需要新建…

    Java 2023年5月27日
    00
  • 浅析MMAP零拷贝在RocketMQ中的运用

    浅析MMAP零拷贝在RocketMQ中的运用攻略 什么是MMAP MMAP(Memory Mapped Files)是指通过映射虚拟内存的方式来访问硬盘上的文件。在Linux系统中,使用mmap()函数可以将一个文件映射到进程的地址空间中,从而使得该文件变得像是一个内存块一样可以被直接访问。通过MMAP技术,可以实现一些高效的I/O操作,特别是在大数据量传输…

    Java 2023年5月20日
    00
  • SpringBoot整合Spring Data Elasticsearch的过程详解

    下面我将为您详细讲解Spring Boot整合Spring Data Elasticsearch的完整攻略,其中包括以下步骤: 引入依赖 配置Elasticsearch 创建数据实体类 创建Elasticsearch Repository 使用Repository进行数据操作 示例1:添加数据到Elasticsearch中 示例2:从Elasticsearc…

    Java 2023年5月20日
    00
  • iOS音乐播放器实现代码完整版

    “iOS音乐播放器实现代码完整版”是一篇关于在iOS平台上实现音乐播放器的完整教程,以下是该攻略的详细讲解: 1. 概述 本文将详细介绍在iOS平台开发一个完整的音乐播放器所需的代码实现步骤。我们将会使用Apple提供的AVFoundation框架来完成音频的播放、暂停、停止、快进、快退、调整音量等基本操作,并且在界面上展示当前音频的播放进度、歌曲信息、专辑…

    Java 2023年6月15日
    00
  • 学习Java中Class类及其用法

    学习 Java 中 Class 类及其用法 什么是 Class 类 在 Java 中,每个对象都有与之相关联的 Class 类。可以将 Class 看作是一份对象的“说明书”,里面包含着这个对象的所有属性和方法。 在 Java 中,可以使用 getClass() 方法来获取一个对象的 Class 类,也可以使用 .class 来获取某个类的 Class 类。…

    Java 2023年5月26日
    00
  • 很简单的Java断点续传实现原理

    下面是关于“很简单的Java断点续传实现原理”的完整攻略。 一、什么是Java断点续传? Java断点续传是指,在下载或上传文件时,出现网络中断等问题导致下载或上传任务中断时,可以通过实现“断点续传”功能,让下载或上传任务从中断的地方继续执行,而不是重新开始。 二、Java断点续传的实现原理 Java断点续传的实现原理是,通过HTTP协议中的range请求头…

    Java 2023年5月19日
    00
  • Java实现支付宝之第三方支付宝即时到账支付功能

    Java 实现支付宝之第三方支付宝即时到账支付 介绍 本文将介绍如何使用 Java 实现支付宝第三方即时到账支付功能。该功能是指:客户在商家网站购买商品并付款后,商家立即收到钱款,并且客户能够及时地得到商品。 同时,本文也将涉及到支付宝网站接口的相关知识,包括接口的调用、数据传输与签名等。 准备工作 在开始实现功能前,需要先完成以下准备工作: 注册支付宝账户…

    Java 2023年6月15日
    00
  • Spring Boot实现异步请求(Servlet 3.0)

    所需依赖 实现Servlet 3.0异步请求,我们需要添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </depe…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部