From 2510402809b7c5f46262c234ca41e9bccc184bd7 Mon Sep 17 00:00:00 2001 From: SGWebFreelancer Date: Wed, 17 Jan 2024 16:01:47 +0800 Subject: [PATCH] BAEL-7490 read write file in separate thread --- .../ReadWriteBlockingQueue.java | 88 +++++++++++++++++++ .../readwritethread/ReadWriteThread.java | 62 +++++++++++++ .../src/main/resources/read_file.txt | 5 ++ .../src/main/resources/write_file.txt | 0 4 files changed, 155 insertions(+) create mode 100644 core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteBlockingQueue.java create mode 100644 core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteThread.java create mode 100644 core-java-modules/core-java-io-5/src/main/resources/read_file.txt create mode 100644 core-java-modules/core-java-io-5/src/main/resources/write_file.txt diff --git a/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteBlockingQueue.java b/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteBlockingQueue.java new file mode 100644 index 0000000000..06e5fd7946 --- /dev/null +++ b/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteBlockingQueue.java @@ -0,0 +1,88 @@ +package com.baeldung.readwritethread; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +public class ReadWriteBlockingQueue { + + public static void main(String[] args) { + BlockingQueue queue = new LinkedBlockingQueue<>(); + String inputFileName = "src/main/resources/read_file.txt"; + String outputFileName = "src/main/resources/write_file.txt"; + + Thread producerThread = new Thread(new FileProducer(queue, inputFileName)); + Thread consumerThread = new Thread(new FileConsumer(queue, outputFileName)); + + producerThread.start(); + consumerThread.start(); + + try { + producerThread.join(); // Wait for producer to finish + consumerThread.join(); // Wait for consumer to finish + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} + +class FileProducer implements Runnable { + + private final BlockingQueue queue; + private final String inputFileName; + + public FileProducer(BlockingQueue queue, String inputFileName) { + this.queue = queue; + this.inputFileName = inputFileName; + } + + @Override + public void run() { + try (BufferedReader reader = new BufferedReader(new FileReader(inputFileName))) { + String line; + while ((line = reader.readLine()) != null) { + queue.offer(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} + +class FileConsumer implements Runnable { + + private final BlockingQueue queue; + private final String outputFileName; + + public FileConsumer(BlockingQueue queue, String outputFileName) { + this.queue = queue; + this.outputFileName = outputFileName; + } + + @Override + public void run() { + BufferedWriter writer = null; + try { + writer = new BufferedWriter(new FileWriter(outputFileName)); + String line; + while ((line = queue.poll()) != null) { + writer.write(line); + writer.newLine(); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteThread.java b/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteThread.java new file mode 100644 index 0000000000..7248e0f99d --- /dev/null +++ b/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteThread.java @@ -0,0 +1,62 @@ +package com.baeldung.readwritethread; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; + +public class ReadWriteThread { + + public static void readFile(String filePath) { + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + try { + FileReader fileReader = new FileReader(filePath); + BufferedReader bufferedReader = new BufferedReader(fileReader); + String line; + while ((line = bufferedReader.readLine()) != null) { + System.out.println(line); + } + bufferedReader.close(); + fileReader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + thread.start(); + } + + public static void writeFile(String filePath, String content) { + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + try { + FileWriter fileWriter = new FileWriter(filePath); + fileWriter.write(content); + fileWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + thread.start(); + } + + public static void main(String[] args) { + String readFile = "src/main/resources/read_file.txt"; + String writeFile = "src/main/resources/write_file.txt"; + + writeFile(writeFile, "Hello, world!"); + + readFile(readFile); + + // Sleep for a while to allow the threads to complete + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/core-java-modules/core-java-io-5/src/main/resources/read_file.txt b/core-java-modules/core-java-io-5/src/main/resources/read_file.txt new file mode 100644 index 0000000000..91c461855b --- /dev/null +++ b/core-java-modules/core-java-io-5/src/main/resources/read_file.txt @@ -0,0 +1,5 @@ +Hello, +Baeldung! +Nice to meet you! +My name is +Wynn! \ No newline at end of file diff --git a/core-java-modules/core-java-io-5/src/main/resources/write_file.txt b/core-java-modules/core-java-io-5/src/main/resources/write_file.txt new file mode 100644 index 0000000000..e69de29bb2