java 读写文件[多种方法]

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 Boot 整合 Fisco Bcos的案例分析(区块链)

    下面是 “Spring Boot 整合 Fisco Bcos的案例分析(区块链)” 的完整攻略。 什么是 Fisco Bcos Fisco Bcos 是由中国金融专家打造的一个区块链平台,具有高可用性、高扩展性和高安全性。 Spring Boot 整合 Fisco Bcos 步骤一:在本地安装 Fisco Bcos 在本地安装 Fisco Bcos,详细步骤…

    Java 2023年5月19日
    00
  • java的Hibernate框架报错“QueryTimeoutException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“QueryTimeoutException”错误。这个错误通常是由于以下原因之一引起的: 查询超时:如果查询需要的时间超过了Hibernate配置文件中设置的查询超时时间,则可能会出现此错误。在这种情况下,需要增加查询超时时间以解决此问题。 数据库连接超时:如果数据库连接超时,则可能会出现此错误。在这种情…

    Java 2023年5月4日
    00
  • JS笛卡尔积算法与多重数组笛卡尔积实现方法示例

    JS笛卡尔积算法用来计算多个数组的所有组合结果,它可以轻松地计算多个数组之间的笛卡尔积。下面是JS笛卡尔积算法的实现过程: 实现过程 首先我们需要创建一个空的结果数组,用于存储所有的组合结果。 然后我们需要用for循环嵌套来遍历所有的数组元素。 在遍历的过程中,我们需要用concat方法将数组元素进行组合,并将组合结果添加到结果数组中。 最后,我们返回结果数…

    Java 2023年5月19日
    00
  • 带你入门Java的方法

    带你入门Java的方法 Java是一种广泛应用于开发Web应用、Android应用、桌面应用等领域的编程语言。Java语言易学、易用,是学习编程的好选择。以下是带你入门Java的方法,欢迎阅读和学习! 1. 学习Java基础知识 Java基础知识包括Java语言的语法、数据类型、运算符、控制语句、数组、类、对象、继承、接口等概念。要想写出Java程序,必须要…

    Java 2023年5月19日
    00
  • 如何检测SQL注入技术以及跨站脚本攻击

    SQL注入和跨站脚本攻击是常见的网络安全威胁,本文将详细介绍如何检测和防范这两种攻击。 检测SQL注入攻击 SQL注入的原理 SQL注入攻击是利用Web应用程序中的漏洞,通过向应用程序发送恶意的SQL命令,绕过身份验证和访问控制机制,从而获取敏感信息或完全接管应用程序的数据库管理系统(DBMS)。攻击者可以通过修改SQL查询语句或资料库程序来更改或删除重要数…

    Java 2023年6月15日
    00
  • Java调用Python脚本传递数据并返回计算结果

    Java调用Python脚本并传递数据可以通过Java的ProcessBuilder类,在Java程序中启动Python脚本进程。同时,可以通过标准输入和标准输出进行数据传递。具体步骤如下: 1.编写Python脚本 首先,需要编写Python脚本来处理接收到的数据,并返回计算结果。例如: import sys data = sys.stdin.read()…

    Java 2023年5月26日
    00
  • SpringBoot security安全认证登录的实现方法

    以下是关于SpringBoot security安全认证登录的实现方法的完整攻略,包含详细步骤、示例和代码: SpringBoot security安全认证登录的实现方法 概述 在网站或应用程序中,用户登录是非常常见的一种操作。而用户登录操作需要进行安全认证,防止非法用户的登录,保障网站或应用的安全。SpringBoot提供了基于Spring Securit…

    Java 2023年6月3日
    00
  • 基于Three.js实现360度全景图片

    下面我来详细讲解“基于Three.js实现360度全景图片”的完整攻略。 什么是Three.js Three.js是JavaScript编写的一个3D渲染引擎。它基于WebGL,可用于在网页上创建复杂的3D交互和视觉效果。Three.js是开源的,由Mr.doob写成,是现今最为流行的3D库之一。 什么是360度全景图片 360度全景图片就是将一个场景完全拍…

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