21xrx.com
2025-03-27 16:55:20 Thursday
文章检索 我的文章 写文章
Java实现多线程读写文件的完整代码
2023-07-13 07:24:12 深夜i     --     --
Java 多线程 读写文件 代码实现

Java作为一种高级编程语言,已被广泛应用于各种领域,其中文件读写就是常见的使用场景之一。在Java中,使用多线程实现文件读写可以提高程序的效率和性能。

下面是Java实现多线程读写文件的完整代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadReadWriteFile {
  public static void main(String[] args) throws Exception {
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入要读写的文件路径:");
    String filePath = scanner.nextLine();
    scanner.close();
    File file = new File(filePath);
    if (!file.exists() || !file.isFile()) {
      throw new RuntimeException("文件不存在或不是文件");
    }
    ExecutorService executor = Executors.newFixedThreadPool(2);
    executor.execute(new ReadFileThread(file));
    executor.execute(new WriteFileThread(file, "hello, world!"));
    executor.shutdown();
  }
}
class ReadFileThread implements Runnable {
  private File file;
  public ReadFileThread(File file)
    this.file = file;
  
  @Override
  public void run() {
    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
      String line = null;
      while ((line = reader.readLine()) != null) {
        System.out.println(line);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
class WriteFileThread implements Runnable {
  private File file;
  private String content;
  public WriteFileThread(File file, String content)
    this.file = file;
    this.content = content;
  
  @Override
  public void run() {
    try (FileWriter writer = new FileWriter(file)) {
      writer.write(content);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

该代码创建了一个`MultiThreadReadWriteFile`类,该类中包含了`main`方法,用于测试多线程读写文件的效果。在`main`方法中,用户需要输入要读写的文件路径,代码首先对文件进行了存在性和是否为文件的校验,然后创建了一个线程池`ExecutorService`,其中包含两个线程:`ReadFileThread`和`WriteFileThread`。`ReadFileThread`用于读取文件内容并输出到控制台,`WriteFileThread`用于向文件中写入字符串`"hello, world!"`。

`ReadFileThread`和`WriteFileThread`分别实现了`Runnable`接口,在`run`方法中实现了实际的读写功能。读取文件内容时,使用`BufferedReader`,每次读取一行内容并输出到控制台;写入文件内容时,使用`FileWriter`,将字符串`"hello, world!"`写入到文件中。

最后,程序调用线程池的`shutdown`方法来关闭线程池。

通过使用多线程,程序可以在读写文件时同时进行,从而提高程序的效率。在实际开发中,可以根据具体情况调整线程池的大小和线程的实现方式,来充分发挥Java多线程读写文件的优势。

  
  

评论区