org.apache.commons.io.output

Class LockableFileWriter


public class LockableFileWriter
extends Writer

FileWriter that will create and honor lock files to allow simple cross thread file lock handling.

This class provides a simple alternative to FileWriter that will use a lock file to prevent duplicate writes.

By default, the file will be overwritten, but this may be changed to append. The lock directory may be specified, but defaults to the system property java.io.tmpdir. The encoding may also be specified, and defaults to the platform default.

Version:
$Id: LockableFileWriter.java 437567 2006-08-28 06:39:07Z bayard $
Authors:
Scott Sanders
Michael Salmon
Jon S. Stevens
Daniel Rall
Stephen Colebourne
Andy Lehane

Field Summary

private static String
LCK
The extension for the lock file.
private File
lockFile
The lock file.
private Writer
out
The writer to decorate.

Constructor Summary

LockableFileWriter(File file)
Constructs a LockableFileWriter.
LockableFileWriter(File file, String encoding)
Constructs a LockableFileWriter with a file encoding.
LockableFileWriter(File file, String encoding, boolean append, String lockDir)
Constructs a LockableFileWriter with a file encoding.
LockableFileWriter(File file, boolean append)
Constructs a LockableFileWriter.
LockableFileWriter(File file, boolean append, String lockDir)
Constructs a LockableFileWriter.
LockableFileWriter(String fileName)
Constructs a LockableFileWriter.
LockableFileWriter(String fileName, boolean append)
Constructs a LockableFileWriter.
LockableFileWriter(String fileName, boolean append, String lockDir)
Constructs a LockableFileWriter.

Method Summary

void
close()
Closes the file writer.
private void
createLock()
Creates the lock file.
void
flush()
private Writer
initWriter(File file, String encoding, boolean append)
Initialise the wrapped file writer.
private void
testLockDir(File lockDir)
Tests that we can write to the lock directory.
void
write(String str)
void
write(String str, int st, int end)
void
write(char[] chr)
void
write(char[] chr, int st, int end)
void
write(int idx)

Field Details

LCK

private static final String LCK
The extension for the lock file.

lockFile

private final File lockFile
The lock file.

out

private final Writer out
The writer to decorate.

Constructor Details

LockableFileWriter

public LockableFileWriter(File file)
            throws IOException
Constructs a LockableFileWriter. If the file exists, it is overwritten.
Parameters:
file - the file to write to, not null

LockableFileWriter

public LockableFileWriter(File file,
                          String encoding)
            throws IOException
Constructs a LockableFileWriter with a file encoding.
Parameters:
file - the file to write to, not null
encoding - the encoding to use, null means platform default

LockableFileWriter

public LockableFileWriter(File file,
                          String encoding,
                          boolean append,
                          String lockDir)
            throws IOException
Constructs a LockableFileWriter with a file encoding.
Parameters:
file - the file to write to, not null
encoding - the encoding to use, null means platform default
append - true if content should be appended, false to overwrite
lockDir - the directory in which the lock file should be held

LockableFileWriter

public LockableFileWriter(File file,
                          boolean append)
            throws IOException
Constructs a LockableFileWriter.
Parameters:
file - the file to write to, not null
append - true if content should be appended, false to overwrite

LockableFileWriter

public LockableFileWriter(File file,
                          boolean append,
                          String lockDir)
            throws IOException
Constructs a LockableFileWriter.
Parameters:
file - the file to write to, not null
append - true if content should be appended, false to overwrite
lockDir - the directory in which the lock file should be held

LockableFileWriter

public LockableFileWriter(String fileName)
            throws IOException
Constructs a LockableFileWriter. If the file exists, it is overwritten.
Parameters:
fileName - the file to write to, not null

LockableFileWriter

public LockableFileWriter(String fileName,
                          boolean append)
            throws IOException
Constructs a LockableFileWriter.
Parameters:
fileName - file to write to, not null
append - true if content should be appended, false to overwrite

LockableFileWriter

public LockableFileWriter(String fileName,
                          boolean append,
                          String lockDir)
            throws IOException
Constructs a LockableFileWriter.
Parameters:
fileName - the file to write to, not null
append - true if content should be appended, false to overwrite
lockDir - the directory in which the lock file should be held

Method Details

close

public void close()
            throws IOException
Closes the file writer.

createLock

private void createLock()
            throws IOException
Creates the lock file.

flush

public void flush()
            throws IOException
See Also:
java.io.Writer.flush()

initWriter

private Writer initWriter(File file,
                          String encoding,
                          boolean append)
            throws IOException
Initialise the wrapped file writer. Ensure that a cleanup occurs if the writer creation fails.
Parameters:
file - the file to be accessed
encoding - the encoding to use
append - true to append
Returns:
The initialised writer

testLockDir

private void testLockDir(File lockDir)
            throws IOException
Tests that we can write to the lock directory.
Parameters:
lockDir - the File representing the lock directory

write

public void write(String str)
            throws IOException
See Also:
java.io.Writer.write(String)

write

public void write(String str,
                  int st,
                  int end)
            throws IOException
See Also:
java.io.Writer.write(String, int, int)

write

public void write(char[] chr)
            throws IOException
See Also:
java.io.Writer.write(char[])

write

public void write(char[] chr,
                  int st,
                  int end)
            throws IOException
See Also:
java.io.Writer.write(char[], int, int)

write

public void write(int idx)
            throws IOException
See Also:
java.io.Writer.write(int)