如何用Java写入锁定的文件?

时间:2015-01-22 09:05:23

标签: java eclipse eclipse-plugin

我正在写一个扩展名为.csv的文件。从计时器调用写入文件的函数,该计时器连续检查某些条件并更新文件。但是,如果用户在计时器运行时决定打开该文件,我显然会遇到异常。

是否有可能避免这种情况并更新文件,以便用户在重新打开文件时会看到更新的文件?

编辑:

   Timer=new Timer(5000, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {

                Display.getDefault().asyncExec(new Runnable(){

                    @Override
                    public void run()
                    {
                       //Here I check the conditions

                       checkConditions();
                       if(checkConditions())
                       {     
                           writeInFile();
                       }
                     }
             }
      }  

EDIT(2):

  public void writeInFile()
        {
        File firstFile=new File("file location");
        BufferedWriter out_firstFile = null;
        FileWriter firstFileStream;
        firstFileStream= new FileWriter(firstFile, false);

out_firstFile = new BufferedWriter(firstFileStream);
        out_firstFile.write("Here I write something :) ");
        out_firstFile.close(); 

        }

1 个答案:

答案 0 :(得分:1)

首先你的陈述“但是,如果用户决定在计时器运行时打开该文件,我显然会得到一个FileNotFound异常。”绝对不是很明显。

你怎么称呼“打开文件”。如果用户使用文本编辑器或其中一个查看工具打开文件,则取决于该工具。例如,Unix的less或MS Windows的记事本只是读取文件,甚至不锁定它。 Howerver其他工具可以锁定文件,所以你确实无法写入它,但我认为异常会有所不同。

因此,我将您的问题更改为以下“如何写入锁定文件?”。 简短的回答是“你不能写入锁定的文件。” 我建议的解决方案是实现重试机制。例如,如果您无法写入文件,因为此时它已被锁定,请将您的内容写入临时文件并再次尝试,然后再次...直到您成功为止。