Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: creating file every number of seconds

I'm using ScheduledThreadPoolExecutor to create a file every fileIntervalInSeconds seconds:

executorService = new ScheduledThreadPoolExecutor(1);
        executorService.scheduleAtFixedRate(new Runnable()
        {
            @Override
            public void run()
            {
                    File file = new File(fileName);
                    if (file.exists())
                    {
                        Log.debug("creating new file");
                        openFileWriter(file);
                    }

            }
        }, fileIntervalInSeconds, fileIntervalInSeconds, TimeUnit.SECONDS);
    }
private void openFileWriter() throws FileSystemNotificationException
{

        // 1 - close exist writer
        writer.close();
        // 2 - rename to backup file name
          ...
        // 3 - create new file      
        FileWriter writerFile = new FileWriter(fileName, true);
        writer = new PrintWriter(writerFile);

}

And i'm writing alert Messages to the file all the time:

private synchronized void writeLine(String line) throws InterruptedException
{
    writer.println(line);
}

My problem is:

  1. how can i ensure that i'm using writer when it is not closed? (writer.close())
  2. How can i wait to the ScheduledThreadPoolExecutor to finish creating the file before start writing
like image 503
Yosefarr Avatar asked Jul 19 '26 16:07

Yosefarr


1 Answers

How about checking the file exists before you write to it. No need for a backrgound thread or synchronization

private synchronized void writeLine(String line) {
    if (!file.exists())
       reopenWritingFile();
    writer.println(line);
}
like image 129
Peter Lawrey Avatar answered Jul 22 '26 05:07

Peter Lawrey