Class LockableFileWriter

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.Appendable, java.lang.AutoCloseable

    public class LockableFileWriter
    extends java.io.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.

    Note: The lock file is deleted when close() is called - or if the main file cannot be opened initially. In the (unlikely) event that the lock file cannot be deleted, an exception is thrown.

    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.

    To build an instance, see LockableFileWriter.Builder.

    • Field Detail

      • LCK

        private static final java.lang.String LCK
        The extension for the lock file.
        See Also:
        Constant Field Values
      • out

        private final java.io.Writer out
        The writer to decorate.
      • lockFile

        private final java.io.File lockFile
        The lock file.
    • Constructor Detail

      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.io.File file)
                           throws java.io.IOException
        Constructs a LockableFileWriter. If the file exists, it is overwritten.
        Parameters:
        file - the file to write to, not null
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.io.File file,
                                  boolean append)
                           throws java.io.IOException
        Constructs a LockableFileWriter.
        Parameters:
        file - the file to write to, not null
        append - true if content should be appended, false to overwrite
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.io.File file,
                                  boolean append,
                                  java.lang.String lockDir)
                           throws java.io.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
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.io.File file,
                                  java.nio.charset.Charset charset)
                           throws java.io.IOException
        Constructs a LockableFileWriter with a file encoding.
        Parameters:
        file - the file to write to, not null
        charset - the charset to use, null means platform default
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
        Since:
        2.3
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.io.File file,
                                  java.nio.charset.Charset charset,
                                  boolean append,
                                  java.lang.String lockDir)
                           throws java.io.IOException
        Constructs a LockableFileWriter with a file encoding.
        Parameters:
        file - the file to write to, not null
        charset - the name of the requested charset, 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
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
        Since:
        2.3
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.io.File file,
                                  java.lang.String charsetName)
                           throws java.io.IOException
        Constructs a LockableFileWriter with a file encoding.
        Parameters:
        file - the file to write to, not null
        charsetName - the name of the requested charset, null means platform default
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
        java.nio.charset.UnsupportedCharsetException - thrown instead of UnsupportedEncodingException in version 2.2 if the encoding is not supported.
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.io.File file,
                                  java.lang.String charsetName,
                                  boolean append,
                                  java.lang.String lockDir)
                           throws java.io.IOException
        Constructs a LockableFileWriter with a file encoding.
        Parameters:
        file - the file to write to, not null
        charsetName - 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
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
        java.nio.charset.UnsupportedCharsetException - thrown instead of UnsupportedEncodingException in version 2.2 if the encoding is not supported.
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.lang.String fileName)
                           throws java.io.IOException
        Constructs a LockableFileWriter. If the file exists, it is overwritten.
        Parameters:
        fileName - the file to write to, not null
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.lang.String fileName,
                                  boolean append)
                           throws java.io.IOException
        Constructs a LockableFileWriter.
        Parameters:
        fileName - file to write to, not null
        append - true if content should be appended, false to overwrite
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
      • LockableFileWriter

        @Deprecated
        public LockableFileWriter​(java.lang.String fileName,
                                  boolean append,
                                  java.lang.String lockDir)
                           throws java.io.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
        Throws:
        java.lang.NullPointerException - if the file is null
        java.io.IOException - in case of an I/O error
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Closes the file writer and deletes the lock file.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in class java.io.Writer
        Throws:
        java.io.IOException - if an I/O error occurs.
      • createLock

        private void createLock()
                         throws java.io.IOException
        Creates the lock file.
        Throws:
        java.io.IOException - if we cannot create the file
      • flush

        public void flush()
                   throws java.io.IOException
        Flushes the stream.
        Specified by:
        flush in interface java.io.Flushable
        Specified by:
        flush in class java.io.Writer
        Throws:
        java.io.IOException - if an I/O error occurs.
      • initWriter

        private java.io.Writer initWriter​(java.io.File file,
                                          java.nio.charset.Charset charset,
                                          boolean append)
                                   throws java.io.IOException
        Initializes the wrapped file writer. Ensure that a cleanup occurs if the writer creation fails.
        Parameters:
        file - the file to be accessed
        charset - the charset to use
        append - true to append
        Returns:
        The initialized writer
        Throws:
        java.io.IOException - if an error occurs
      • testLockDir

        private void testLockDir​(java.io.File lockDir)
                          throws java.io.IOException
        Tests that we can write to the lock directory.
        Parameters:
        lockDir - the File representing the lock directory
        Throws:
        java.io.IOException - if we cannot write to the lock directory
        java.io.IOException - if we cannot find the lock file
      • write

        public void write​(char[] cbuf)
                   throws java.io.IOException
        Writes the characters from an array.
        Overrides:
        write in class java.io.Writer
        Parameters:
        cbuf - the characters to write
        Throws:
        java.io.IOException - if an I/O error occurs.
      • write

        public void write​(char[] cbuf,
                          int off,
                          int len)
                   throws java.io.IOException
        Writes the specified characters from an array.
        Specified by:
        write in class java.io.Writer
        Parameters:
        cbuf - the characters to write
        off - The start offset
        len - The number of characters to write
        Throws:
        java.io.IOException - if an I/O error occurs.
      • write

        public void write​(int c)
                   throws java.io.IOException
        Writes a character.
        Overrides:
        write in class java.io.Writer
        Parameters:
        c - the character to write
        Throws:
        java.io.IOException - if an I/O error occurs.
      • write

        public void write​(java.lang.String str)
                   throws java.io.IOException
        Writes the characters from a string.
        Overrides:
        write in class java.io.Writer
        Parameters:
        str - the string to write
        Throws:
        java.io.IOException - if an I/O error occurs.
      • write

        public void write​(java.lang.String str,
                          int off,
                          int len)
                   throws java.io.IOException
        Writes the specified characters from a string.
        Overrides:
        write in class java.io.Writer
        Parameters:
        str - the string to write
        off - The start offset
        len - The number of characters to write
        Throws:
        java.io.IOException - if an I/O error occurs.