java 读写文件[多种方法]

yizhihongxing

Java 读写文件攻略

在 Java 中,提供了多种读写文件的方法,本文将介绍最常用的几种方法,以及两条示例。

使用 FileInputStream 和 FileOutputStream

Java 的 FileInputStreamFileOutputStream 分别表示字节流的输入输出流,可以用于读写二进制文件。以下是使用这种方法读写文件的示例代码:

import java.io.*;

public class ReadWriteFileDemo {
    public static void main(String[] args) {
        try {
            // 读文件
            FileInputStream inputStream = 
                new FileInputStream("input.txt");
            int data = inputStream.read();
            while(data != -1) {
                // do something with data...
                System.out.println(data);
                data = inputStream.read();
            }
            inputStream.close();

            // 写文件
            FileOutputStream outputStream = 
                new FileOutputStream("output.txt");
            String str = "Hello, world!";
            byte[] strToBytes = str.getBytes();
            outputStream.write(strToBytes);
            outputStream.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,FileInputStreamFileOutputStream 都需要传入一个文件的路径作为参数来创建。读文件的步骤是:打开输入流 -> 读取数据 -> 关闭输入流;写文件的步骤是:打开输出流 -> 写入数据 -> 关闭输出流。

使用 FileReader 和 FileWriter

Java 的 FileReaderFileWriter 分别表示字符流的输入输出流,可以用于读写文本文件。以下是使用这种方法读写文件的示例代码:

import java.io.*;

public class ReadWriteFileDemo {
    public static void main(String[] args) {
        try {
            // 读文件
            FileReader reader = new FileReader("input.txt");
            int data = reader.read();
            while(data != -1) {
                // do something with data...
                System.out.print((char) data);
                data = reader.read();
            }
            reader.close();

            // 写文件
            FileWriter writer = new FileWriter("output.txt");
            writer.write("Hello, world!");
            writer.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,FileReaderFileWriter 都需要传入一个文件的路径作为参数来创建。读文件和写文件的步骤与字节流的方法类似。

示例一:读取文件内容到字符串

以下是一个将文件内容读取到字符串中的示例代码:

import java.io.*;

public class ReadFileToStringDemo {
    public static String readFileToString(String filePath) {
        StringBuilder result = new StringBuilder();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filePath));
            String line = reader.readLine();
            while (line != null) {
                result.append(line).append("\n");
                line = reader.readLine();
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result.toString();
    }

    public static void main(String[] args) {
        String content = readFileToString("input.txt");
        System.out.println(content);
    }
}

上述代码中,我们使用了 BufferedReader 读取文件的内容,并将每行文本拼接成一个字符串返回。

示例二:使用 NIO 读写文件

以下是使用 NIO 读写文件的示例代码:

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class NIOReadWriteDemo {
    public static void readFile(String fileName) throws IOException {
        RandomAccessFile file = new RandomAccessFile(fileName, "rw");
        FileChannel channel = file.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        while (channel.read(buffer) > 0) {
            buffer.flip();
            while (buffer.hasRemaining()) {
                System.out.print((char) buffer.get());
            }
            buffer.clear();
        }
        channel.close();
        file.close();
    }

    public static void writeFile(String fileName, String content) throws IOException {
        RandomAccessFile file = new RandomAccessFile(fileName, "rw");
        FileChannel channel = file.getChannel();
        byte[] bytes = content.getBytes();
        ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
        buffer.put(bytes);
        buffer.flip();
        channel.write(buffer);
        channel.close();
        file.close();
    }

    public static void main(String[] args) {
        try {
            readFile("input.txt");
            writeFile("output.txt", "Hello, world!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在 NIO 中,我们使用 FileChannelByteBuffer 来进行文件的读写操作。在读文件时,我们首先打开文件通道,然后创建一个缓冲区来保存读取到的字节,每次从通道中读取数据后,要记得重置缓冲区。

在写文件时,我们先将要写入的字符串转换为字节数组,然后创建一个缓冲区来保存这些字节。写入过程与读取过程类似。

使用 NIO 的好处是,它可以处理大文件并且速度比较快。因为它使用内存映射文件来读写数据,而且它的 API 比较简单易用。但是,使用 NIO 读写文件比较底层,需要对 Java I/O 有一定的了解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 读写文件[多种方法] - Python技术站

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

相关文章

  • Spring security登录过程逻辑详解

    我将详细讲解“Spring security登录过程逻辑详解”的攻略。具体内容如下: 标题 Spring security登录过程逻辑详解 介绍 Spring Security是基于Spring的安全框架,提供了认证和授权的功能,是保障应用系统安全的重要组成部分。本文将详细介绍Spring Security的登录过程,并结合代码示例进行演示。 正文 Spri…

    Java 2023年5月20日
    00
  • SpringMVC使用第三方组件实现文件上传

    要使用SpringMVC实现文件上传,需要使用第三方组件,常用的是Apache Commons FileUpload组件。下面是详细的攻略: 1. 引入包 在项目的pom.xml文件中,引入Apache Commons FileUpload组件的依赖: <dependency> <groupId>commons-fileupload&…

    Java 2023年6月15日
    00
  • Android下拉阻尼效果实现原理及简单实例

    下面我将详细讲解“Android下拉阻尼效果实现原理及简单实例”的完整攻略。 Android下拉阻尼效果实现原理 原理介绍 下拉阻尼效果是指在下拉列表或者下拉刷新等场景中,当用户下拉视图时,视图能够随手指的滑动而进行拉伸或缩放,形成一种类似于弹簧效果的体验。 实现该效果的原理是利用滑动事件监听,根据手指滑动时的位移量以及速度,计算出视图需要滑动的距离,然后对…

    Java 2023年5月23日
    00
  • 一篇文章讲解清楚MySQL索引

    MySQL索引是MySQL数据库中非常重要的一部分,它可以极大地提高数据库的查询速度。下面是讲解MySQL索引的完整攻略。 索引的原理及分类 索引的原理: 索引(Index)是一种高效的数据结构,它对数据库中一列或多列的值进行排序,可以大大提高数据查询的效率。通过使用索引,数据库可以快速定位到需要查询的数据行,而不用逐行遍历整个数据表。 索引的分类: MyS…

    Java 2023年5月19日
    00
  • Java中Thread类的使用和它的属性

    一、Thread类的使用 在Java中,多线程的实现主要通过Thread类来完成。通过继承Thread类并重写run()方法来实现多线程的功能。 具体步骤如下: 1.定义Thread类的子类,并重写其run()方法 2.在run()方法中编写并发执行的代码。 3.调用Thread类中的start()方法,就可以启动线程。 举个例子,如下所示: public …

    Java 2023年5月19日
    00
  • Springboot整合JwtHelper实现非对称加密

    下面是关于SpringBoot整合JwtHelper实现非对称加密的攻略: 一、背景知识 在了解攻略之前,需要先了解以下一些背景知识: JwtHelper:一个用于生成和验证JSON Web Tokens的Java库; 非对称加密算法:使用公钥和私钥加密、解密数据的算法,具有数据安全、数据完整性验证等优点。 本攻略将会使用JwtHelper库结合RSA非对称…

    Java 2023年5月20日
    00
  • MybatisPlus特殊查询的实现介绍

    MybatisPlus特殊查询的实现介绍 MybatisPlus是基于Mybatis的一个增强库,其中包括了很多常用操作的封装,极大地降低了开发者的编码难度和时间成本,同时也提高了代码的可读性和可维护性。 但是有些时候,简单的CRUD操作并不能满足我们的需求。MybatisPlus提供了很多特殊查询的实现方式,本文将简单介绍其中的几种。 前置条件 在具体实现…

    Java 2023年5月20日
    00
  • Jaspersoft Studio添加mysql数据库配置步骤

    下面我来详细讲解“Jaspersoft Studio添加mysql数据库配置步骤”的完整攻略,过程中我将会包含两条示例说明。 1. 下载MySQL JDBC驱动程序 Jaspersoft Studio需要通过JDBC连接到MySQL数据库,因此需要下载MySQL JDBC驱动程序。在MySQL官网下载页面(https://dev.mysql.com/down…

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