类 AtomicFile


  • public final class AtomicFile
    extends Object
    一个帮助类,用于通过创建备份文件对文件执行原子操作,直到写入成功完成。

    Atomic 文件通过确保文件在删除其备份之前已完全写入并同步到磁盘来保证文件完整性。 只要备份文件存在,原始文件就被认为是无效的(上次尝试写入文件时遗留下来的)。

    原子文件不赋予任何文件锁定语义。 当文件可能被多个线程或进程同时访问或修改时, 请勿使用此类。 调用者在访问文件时负责确保适当的互斥不变量。

    • 构造器详细资料

      • AtomicFile

        public AtomicFile​(File baseName)
        Create a new AtomicFile for a file located at the given File path. The secondary backup file will be the same file path with ".bak" appended.
    • 方法详细资料

      • exists

        public boolean exists()
        Returns whether the file or its backup exists.
      • delete

        public void delete()
        Delete the atomic file. This deletes both the base and backup files.
      • startWrite

        public OutputStream startWrite()
                                throws IOException
        Start a new write operation on the file. This returns an OutputStream to which you can write the new file data. If the whole data is written successfully you must call endWrite(OutputStream). On failure you should call OutputStream.close() only to free up resources used by it.

        Example usage:

           DataOutputStream dataOutput = null;
           try {
             OutputStream outputStream = atomicFile.startWrite();
             dataOutput = new DataOutputStream(outputStream); // Wrapper stream
             dataOutput.write(data1);
             dataOutput.write(data2);
             atomicFile.endWrite(dataOutput); // Pass wrapper stream
           } finally{
             if (dataOutput != null) {
               dataOutput.close();
             }
           }
         

        Note that if another thread is currently performing a write, this will simply replace whatever that thread is writing with the new file being written by this thread, and when the other thread finishes the write the new write operation will no longer be safe (or will be lost). You must do your own threading protection for access to AtomicFile.

        抛出:
        IOException
      • endWrite

        public void endWrite​(OutputStream str)
                      throws IOException
        Call when you have successfully finished writing to the stream returned by startWrite(). This will close, sync, and commit the new data. The next attempt to read the atomic file will return the new file stream.
        参数:
        str - Outer-most wrapper OutputStream used to write to the stream returned by startWrite().
        抛出:
        IOException
        另请参阅:
        startWrite()
      • openRead

        public InputStream openRead()
                             throws FileNotFoundException
        Open the atomic file for reading. If there previously was an incomplete write, this will roll back to the last good data before opening for read.

        Note that if another thread is currently performing a write, this will incorrectly consider it to be in the state of a bad write and roll back, causing the new data currently being written to be dropped. You must do your own threading protection for access to AtomicFile.

        抛出:
        FileNotFoundException