首页 > 编程语言 >Java I/O

Java I/O

时间:2024-07-07 09:13:31浏览次数:13  
标签:java String Java IOException io import new

Java I/O(输入/输出)是Java语言中用于处理数据流的一套丰富而强大的API。Java I/O分为两个主要的包:java.iojava.nio(非阻塞I/O)。以下是一些Java I/O的基本概念和组件:

1. 流的概念

  • :是字节序列的表示,可以是输入流(读取数据)或输出流(发送数据)。

2. 主要的流类

  • InputStreamOutputStream:所有输入流的超类和所有输出流的超类。
  • ReaderWriter:基于字符的输入/输出流的超类,使用字符集进行编码和解码。

3. 字节流

  • FileInputStream:从文件中读取字节。
  • FileOutputStream:向文件写入字节。
  • ByteArrayInputStreamByteArrayOutputStream:内存中的字节数组输入/输出。

4. 字符流

  • FileReaderFileWriter:从文件读取字符和向文件写入字符。
  • CharArrayReaderCharArrayWriter:内存中的字符数组输入/输出。

5. 缓冲流

  • BufferedInputStreamBufferedOutputStream:提供缓冲以提高读写效率。
  • BufferedReaderBufferedWriter:提供缓冲以提高字符读写效率。

6. 数据流

  • DataInputStream:从底层的InputStream中读取数据,并将其转换为Java原始数据类型。
  • DataOutputStream:将Java原始数据类型转换为可以由InputStream读取的字节。

7. 对象流

  • ObjectInputStreamObjectOutputStream:允许对象的读写。

8. 打印流

  • PrintStreamPrintWriter:提供方便的打印方法。

9. 随机访问文件

  • RandomAccessFile:可以以读、写或二者兼备的模式打开文件,并可以随机访问文件。

10. 管道流

  • PipedInputStreamPipedOutputStream:允许线程通过管道进行通信。

11. 文件操作

  • File:表示文件和目录路径名,提供文件操作方法。

示例代码

以下是使用Java I/O进行文件读写的基本示例:

import java.io.*;

public class IOExample {
    public static void main(String[] args) {
        String filePath = "example.txt";
        
        // 写入文本到文件
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write("Hello, Java I/O!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        // 从文件读取文本
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 使用try-with-resources语句自动管理资源,确保Closeable对象在使用后能够正确关闭。
  • 捕获并处理IOException,因为I/O操作可能会引发此类异常。
  • 根据需要选择合适的流类型,比如字节流或字符流。

Java I/O是Java SE的核心部分,对于任何需要处理文件或数据流的Java应用程序来说都是必不可少的。



以下是Java I/O中不同类型流的使用示例:

1. 字节流 - FileInputStream 和 FileOutputStream

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

public class ByteStreamExample {
    public static void main(String[] args) {
        String fromFile = "source.txt";
        String toFile = "destination.txt";

        try (FileInputStream fis = new FileInputStream(fromFile);
             FileOutputStream fos = new FileOutputStream(toFile)) {
            int byteRead;
            while ((byteRead = fis.read()) != -1) {
                fos.write(byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 字符流 - FileReader 和 FileWriter

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

public class CharStreamExample {
    public static void main(String[] args) {
        String fromFile = "source.txt";
        String toFile = "destination.txt";

        try (FileReader fr = new FileReader(fromFile);
             FileWriter fw = new FileWriter(toFile)) {
            int charRead;
            while ((charRead = fr.read()) != -1) {
                fw.write(charRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 缓冲流 - BufferedReader 和 BufferedWriter

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

public class BufferedStreamExample {
    public static void main(String[] args) {
        String inputFile = "input.txt";
        String outputFile = "output.txt";

        try (BufferedReader br = new BufferedReader(new FileReader(inputFile));
             BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile))) {
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                bw.newLine(); // 写入一个新行
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 数据流 - DataInputStream 和 DataOutputStream

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamExample {
    public static void main(String[] args) {
        String dataFile = "data.txt";

        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(dataFile))) {
            dos.writeInt(123);
            dos.writeDouble(45.67);
        } catch (IOException e) {
            e.printStackTrace();
        }

        try (DataInputStream dis = new DataInputStream(new FileInputStream(dataFile))) {
            int intValue = dis.readInt();
            double doubleValue = dis.readDouble();
            System.out.println("Int: " + intValue + ", Double: " + doubleValue);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 对象流 - ObjectOutputStream 和 ObjectInputStream

import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.Serializable;

public class ObjectStreamExample {
    public static void main(String[] args) {
        String objectFile = "object.dat";
        MyObject obj = new MyObject("Data", 123);

        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(objectFile))) {
            oos.writeObject(obj);
        } catch (IOException e) {
            e.printStackTrace();
        }

        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(objectFile))) {
            MyObject objRead = (MyObject) ois.readObject();
            System.out.println("Object read: " + objRead);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    static class MyObject implements Serializable {
        private String data;
        private int number;

        public MyObject(String data, int number) {
            this.data = data;
            this.number = number;
        }

        @Override
        public String toString() {
            return "MyObject{" +
                    "data='" + data + '\'' +
                    ", number=" + number +
                    '}';
        }
    }
}

6. 随机访问文件 - RandomAccessFile

import java.io.RandomAccessFile;
import java.io.IOException;

public class RandomAccessFileExample {
    public static void main(String[] args) {
        String file = "random.dat";

        try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
            // 写入数据
            raf.writeInt(12345);
            raf.writeDouble(67.89);

            // 移动文件指针到文件开头
            raf.seek(0);

            // 读取数据
            int intValue = raf.readInt();
            double doubleValue = raf.readDouble();
            System.out.println("Int: " + intValue + ", Double: " + doubleValue);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 所有示例都使用了try-with-resources语句来自动关闭资源。
  • 这些示例中的文件路径、数据类型和数据值仅为示例,你应该根据实际需求进行调整。
  • 对于ObjectOutputStreamObjectInputStream,对象必须实现Serializable接口。
  • 异常处理使用了e.printStackTrace(),仅用于示例。在实际应用中,你可能需要更精细的异常处理策略。

标签:java,String,Java,IOException,io,import,new
From: https://www.cnblogs.com/windheart/p/18288151

相关文章

  • java内存管理机制垃圾回收的详细说明
    前言在前面三篇文章中,对JVM的内存布局、内存分配、垃圾标记做了较多的介绍,垃圾都已经标记出来了,那剩下的就是如何高效的去回收啦!这篇文章将重点介绍如何回收旧手机、电脑、彩电、冰箱~啊呸(⊙o⊙)…将重点介绍几种垃圾回收算法、HotSpot中常用的垃圾收集器的主要特点和应用场......
  • 原生js上传图片至阿里云oss并回显,配合上个帖子的java使用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Invoice</title>......
  • Java初学
    先在网站上找了一些关于Java的视频和书籍,确定了需要的书和课程。之后根据视频资料在Oracle官方网站上下载安装了JDK,并用win+R来验证是否安装成功,同时还在eclipse网站上下载安装了EclipseIDEforEnterpriseJavaandWebDevelopers成功安装了Java开发环境和开发软件。下载......
  • Java调用第三方接口的秘籍:技巧、案例与最佳实践
    Java调用第三方接口的秘籍:技巧、案例与最佳实践在Java开发中,调用第三方接口是一项常见的任务。无论是与外部系统交互、集成其他服务,还是调用远程API获取数据,掌握有效的第三方接口调用技巧都是至关重要的。本文将深入剖析Java调用第三方接口的常见方法和技巧,结合实际案例,展......
  • 初识Java
    1.Oracle网站下载并安装JDK,验证JDK是否安装成功,卸载JDK。版本选择:JDK-8-11-17为LTS版本,较稳定。验证:在命令行窗口输入命令查看。a.看java、javac是否可用。b.看java、javac的版本是否无问题。2.命令行窗口常见命令。D:切换到D盘dir显示所在目录的所有文件和目录cd......
  • Java学习第一周
    1Java的核心优势和特点核心优势:跨平台/可移植特点:安全性面向对象简单性高性能分布式多线程健壮性2Java程序运行机制源文件(Java文件)——编译器——字节码(class文件)——JVM虚拟机——操作系统3JDK的下载安装配置JDK环境变量(系统变量)Path4第一个Java程序publicclass......
  • JAVA学习day05
    继承supersuper();super调用父类的构造方法,且必须在构造方法的第一行。this();调用本类的构造方法。super只能出现在子类的方法或者构造方法中。super和this不能同时调用构造方法。this代表调用当前类的对象super代表调用父类的对象this在没有继承的情况下也能使用......
  • 基于javaweb jsp ssm框架的校园闲置物品交易平台+jsp录像(源码+lw+部署文档+讲解等)
    前言......
  • 基于javaweb jsp ssm快餐店点餐结算系统的设计与实现+vue录像(源码+lw+部署文档+讲解
    前言......
  • 基于javaweb jsp ssm库存管理软件设计与实现+vue录像(源码+lw+部署文档+讲解等)
    前言......