【发布时间】:2011-12-26 15:31:34
【问题描述】:
是否可以同时读取和写入相同的文本文件?
第一个线程将文本字符串添加到文件中,它会在没有数据时添加“结束”字符串。
第二个线程应该从该文件中读取数据,如果有更多新数据则阻塞。它应该在读取“结束”字符串时结束。
public class TheFileReader implements Runnable {
public void run() {
FileInputStream is = null;
BufferedReader fbr = null;
File file = new File ("C:\\temp\\fileout3.txt");
String s1 ="";
try {
fbr = new BufferedReader(new FileReader(file), 1024*1024);
while (s1.equals("exit")==false){
s1 =fbr.readLine();
if (s1==null){
s1="";
Thread.sleep (50);
}
else
System.out.println(s1);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally
{
try {
fbr.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
public class TheFileWriter implements Runnable {
public void run() {
FileOutputStream os = null;
BufferedWriter fbw = null;
File file = new File ("C:\\temp\\fileout3.txt");
String s1 ="";
try {
fbw = new BufferedWriter(new FileWriter(file), 1024*1024);
for (int i = 0; i < 100; i++) {
fbw.write("test" + i);
fbw.newLine();
}
fbw.write("exit");
} catch (IOException e) {
e.printStackTrace();
} finally
{
try {
fbw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
更新:
如果我添加fbw.flush() after fbw.newLine(); 我认为它会起作用。
【问题讨论】:
-
看起来您正在尝试设计一个数据库。您可能想使用真实的东西。
-
看起来与以下问题相同:stackoverflow.com/questions/8607169/…
标签: java multithreading io