BAEL-7490 read write file in separate thread

This commit is contained in:
SGWebFreelancer
2024-01-17 16:01:47 +08:00
parent 8746cae8c0
commit 2510402809
4 changed files with 155 additions and 0 deletions
@@ -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<String> 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<String> queue;
private final String inputFileName;
public FileProducer(BlockingQueue<String> 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<String> 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();
}
}
}
}
}
@@ -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();
}
}
}
@@ -0,0 +1,5 @@
Hello,
Baeldung!
Nice to meet you!
My name is
Wynn!