我有几个输入文本文件,我将它们读取到一个输出文件。每个输入文件都在单独的线程中读取。我想将整个单词或行写入输出文件。为了写入输入文件的全部内容,我在 FileWriter 上同步,如下所示:
public void run() {
synchronized (fw) {
int character;
try {
while ((character= fr.read()) != -1) {
fw.write(character);
}
fw.write("\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
其中 fw 是 FileWriter,fr FileReader。
如何同步写字或行?我需要一个字符一个字符地读写。
单词示例:file1: aaa bbb ccc;文件2:AAA BBB CCC;文件3:11222
输出文件:aaa AAA 11 bbb BBB 222 ccc CCC
最佳答案
修改即可得到你想要的
(character= fr.read()) != -1)
通过测试任何分隔符。当您从文件中读取空格时,就会跳出 while 循环。您还需要另一个 while 循环围绕同步块(synchronized block),以便您的 run 方法重复尝试获取锁,但也允许其他线程进入。
public void run() throws IOException {
boolean reading = true;
StringBuilder buffer = new StringBuilder();
while(reading) {
int character = fr.read();
if(character == -1) {
reading = false;
character='\n';
}
buffer.append((char)character);
if (character == ' ' || character == '\t' || character == '\n') {
synchronized(fw) {
fw.write(buffer.toString());
}
buffer = new StringBuilder();
}
}
}
但请注意,您正在同步读取和写入。由于读取是在同步块(synchronized block)中进行的,因此一次只有一个线程从文件中读取。更好的设计是每个线程缓冲读取的字符,然后写出整个单词。
关于java - 如何在逐个字符读写时同步代码块以将整个字/行写入输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252768/