【Java开发者必看】揭秘Java访问磁盘文件机制,让你的代码效率翻倍!

在Java中,访问磁盘文件通常使用java.io包中的类。这些类提供了多种方式来读取和写入文件。以下是一些常用的类及其用法:

1. FileReader 和 FileWriter

解释:
  • FileReader用于读取字符文件。
  • FileWriter用于写入字符文件。
示例代码:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileReaderWriterExample {
    public static void main(String[] args) {
        // 写入文件
        try (FileWriter writer = new FileWriter("example.txt")) {
            writer.write("Hello, World!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取文件
        try (FileReader reader = new FileReader("example.txt")) {
            int character;
            while ((character = reader.read()) != -1) {
                System.out.print((char) character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. BufferedReader 和 BufferedWriter

解释:
  • BufferedReader用于高效地读取字符输入流。
  • BufferedWriter用于高效地写入字符输出流。
示例代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedReaderWriterExample {
    public static void main(String[] args) {
        // 写入文件
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"))) {
            writer.write("Hello, World!");
            writer.newLine(); // 写入一个新行
            writer.write("This is a buffered writer example.");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取文件
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. FileInputStream 和 FileOutputStream

解释:
  • FileInputStream用于读取字节文件。
  • FileOutputStream用于写入字节文件。
示例代码:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileStreamExample {
    public static void main(String[] args) {
        // 写入文件
        try (FileOutputStream fos = new FileOutputStream("example.bin")) {
            fos.write(65); // 写入字符 'A' 的 ASCII 码值
            fos.write(new byte[]{66, 67, 68}); // 写入字符 'B', 'C', 'D' 的 ASCII 码值
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取文件
        try (FileInputStream fis = new FileInputStream("example.bin")) {
            int byteData;
            while ((byteData = fis.read()) != -1) {
                System.out.print((char) byteData); // 将字节数据转换为字符并打印
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. RandomAccessFile

解释:
  • RandomAccessFile允许对文件进行随机读写操作。它既可以读也可以写,并且可以移动文件指针到任意位置。
示例代码:
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileExample {
    public static void main(String[] args) {
        try (RandomAccessFile raf = new RandomAccessFile("example.txt", "rw")) {
            raf.writeUTF("Hello, World!"); // 写入字符串(以UTF格式)
            raf.seek(0); // 移动文件指针到文件开头
            String data = raf.readUTF(); // 读取字符串(以UTF格式)
            System.out.println(data); // 打印读取的数据
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. NIO (New I/O)

解释:
  • Java NIO提供了更高效的文件操作方法,如FileChannelByteBuffer等。
  • NIO支持非阻塞I/O操作,适用于需要高性能的文件处理场景。
示例代码:
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.nio.file.Paths;
import java.nio.file.Files;

public class NIOExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        String content = "Hello, NIO!";
        ByteBuffer buffer = ByteBuffer.wrap(content.getBytes());

        // 写入文件
        try (FileChannel fileChannel = FileChannel.open(path, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
            fileChannel.write(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取文件
        buffer.clear(); // 清空缓冲区以便重新读取数据
        try (FileChannel fileChannel = FileChannel.open(path, StandardOpenOption.READ)) {
            fileChannel.read(buffer);
            buffer.flip(); // 切换缓冲区为读模式
            byte[] bytes = new byte[buffer.remaining()];
            buffer.get(bytes); // 从缓冲区读取数据到字节数组中
            System.out.println(new String(bytes)); // 打印读取的数据
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

通过以上示例代码,你可以了解如何在Java中使用不同的类和方法来访问和操作磁盘文件。根据具体需求选择合适的类和方法,可以提高程序的性能和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值