# Class AtomicFileOutputStream

java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
org.apache.zookeeper.common.AtomicFileOutputStream

All Implemented Interfaces:
  `Closeable, Flushable, AutoCloseable`

public class AtomicFileOutputStream extends FilterOutputStream
A FileOutputStream that has the property that it will only show up at its destination once it has been entirely written and flushed to disk. While being written, it will use a .tmp suffix. When the output stream is closed, it is flushed, fsynced, and will be moved into place, overwriting any file that already exists at that location. NOTE: on Windows platforms, it will not atomically replace the target file - instead the target file is deleted before this one is moved into place.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`TMP_EXTENSION`

### Fields inherited from class FilterOutputStream

`out`

## Constructor Summary

Constructors
Constructor
Description
`AtomicFileOutputStream(File f)`

## Method Summary

Modifier and Type
Method
Description
`void`
`abort()`
Close the atomic file, but do not "commit" the temporary file on top of the destination.
`void`
`close()`
`void`
`write(byte[] b, int off, int len)`
The default write method in FilterOutputStream does not call the write method of its underlying input stream with the same arguments.

### Methods inherited from class FilterOutputStream

`flush, write, write`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### TMP_EXTENSION

public static final String TMP_EXTENSION

See Also:
  - Constant Field Values

## Constructor Details

### AtomicFileOutputStream

public AtomicFileOutputStream(File f) throws FileNotFoundException

Throws:
  `FileNotFoundException`

## Method Details

### write

public void write(byte[] b, int off, int len) throws IOException
The default write method in FilterOutputStream does not call the write method of its underlying input stream with the same arguments. Instead it writes the data byte by byte, override it here to make it more efficient.

Overrides:
  `write` in class `FilterOutputStream`
Throws:
  `IOException`

### close

public void close() throws IOException

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `FilterOutputStream`
Throws:
  `IOException`

### abort

public void abort()
Close the atomic file, but do not "commit" the temporary file on top of the destination. This should be used if there is a failure in writing.