2

我正在处理我正在处理读写文件的java应用程序。但我想同时做这个过程。由于我的文件是日志文件,因此我使用了一些时间间隔从中读取内容java.util.Timer。在这段时间间隔内,我试图在文件中写入一些内容,但这并没有在我的日志文件中更新。

我的计时器课是

public class Timer extends java.util.Timer {

 public void startTimer() {
  Timer t = new Timer();
  Task task = new Task();
  t.schedule(task, 0, 10000);
 }
}

我的班级形式哪个文件读写班级被称为

public class Task extends TimerTask {

 @Override
 public void run() {
  System.out.println("In task ....");
  try {
   SMSQuestions smsQuestions = new SMSQuestions();

   smsQuestions.sendSMSAnswer();
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
 }
}

我的文件读写类是

public void sendSMSAnswer()
    {
        long sender;
        String question;

        try {
            BufferedReader br = new BufferedReader(new FileReader("C:/temp/NowSMS/TEST.log"));
            String line = br.readLine();

            while (line != null) {
                sender = 0;
                question = "";
                System.out.println(line);
                line = br.readLine();
            }
            //To delete all contents in file
            BufferedWriter bw = new BufferedWriter(new FileWriter("C:/temp/NowSMS/TEST.log"));
            bw.write("");

            getDetails();

        }catch(Exception exp)
        {
            exp.printStackTrace();
        }
    }

我的问题是当我通过写入新内容来更新我的日志文件时,它无法更新所以我的问题是:在 java 中是否可以同时读写文件?

4

3 回答 3

2

我建议您查看随机访问文件(请参阅http://docs.oracle.com/javase/tutorial/essential/io/rafs.html)。这个 API 使用起来有点复杂,因为您将读取字节,而不是行,但它应该为您提供所需的内容。

如果您不想处理 NIO,可以改用http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html

于 2013-04-02T09:09:15.770 回答
0

试试这个话题。但你会得到的唯一答案是,它只适用于少数操作系统。

于 2013-04-02T07:54:55.337 回答
0

关于您的代码,我有两件事要说。第一:我认为你错过了应该关闭 br 和 bw 的 finally 块。尝试:终于{

br.close();
bw.close();

} 在 catch 块之后。

第二:在打开文件时将内容写入文件不是一个好主意。我的意思是,如果你用 br 打开一个文件,最好给 bw 另一个文件路径

于 2013-04-17T13:53:19.577 回答