diff --git a/core-java-modules/core-java-io-5/file.txt b/core-java-modules/core-java-io-5/file.txt new file mode 100644 index 0000000000..5dd01c177f --- /dev/null +++ b/core-java-modules/core-java-io-5/file.txt @@ -0,0 +1 @@ +Hello, world! \ No newline at end of file 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..ee0cc84955 --- /dev/null +++ b/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteBlockingQueue.java @@ -0,0 +1,85 @@ +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) throws InterruptedException { + + BlockingQueue queue = new LinkedBlockingQueue<>(); + String readFileName = "src/main/resources/read_file.txt"; + String writeFileName = "src/main/resources/write_file.txt"; + + Thread producerThread = new Thread(new FileProducer(queue, readFileName)); + Thread consumerThread1 = new Thread(new FileConsumer(queue, writeFileName)); + + producerThread.start(); + Thread.sleep(100); // Give producer a head start + consumerThread1.start(); + try { + producerThread.join(); + consumerThread1.join(); + } 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); + System.out.println("Producer added line: " + line); + System.out.println("Queue size: " + queue.size()); + } + } 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() { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFileName))) { + String line; + while ((line = queue.poll()) != null) { + writer.write(line); + writer.newLine(); + System.out.println(Thread.currentThread() + .getId() + " - Consumer processed line: " + line); + System.out.println("Queue size: " + queue.size()); + } + } 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..47f6a79d5f --- /dev/null +++ b/core-java-modules/core-java-io-5/src/main/java/com/baeldung/readwritethread/ReadWriteThread.java @@ -0,0 +1,55 @@ +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 (BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath))) { + String line; + while ((line = bufferedReader.readLine()) != null) { + System.out.println(line); + } + } 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("Hello, world!"); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + thread.start(); + } + + public static void main(String[] args) { + String file = "src/main/resources/text.txt"; + + writeFile(file, "Hello, world!"); + + readFile(file); + + // Sleep for a while to allow the threads to complete + try { + Thread.sleep(1000); + } 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..9193448ace --- /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/text.txt b/core-java-modules/core-java-io-5/src/main/resources/text.txt new file mode 100644 index 0000000000..5dd01c177f --- /dev/null +++ b/core-java-modules/core-java-io-5/src/main/resources/text.txt @@ -0,0 +1 @@ +Hello, world! \ 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..f1df68d0ad --- /dev/null +++ b/core-java-modules/core-java-io-5/src/main/resources/write_file.txt @@ -0,0 +1,5 @@ +Hello, +Baeldung! +Nice to meet you! +My name is +Wynn.