cdm/src/main/java/ucar/unidata/io/RandomAccessFile.java
public synchronized void close() throws IOException {
    if (cache != null) {
      if (cacheState > 0) {
        if (cacheState == 1) {
          cacheState = 2;
          if (cache.release(this))  // return true if in the cache, otherwise was opened regular, so must be closed regular
            return;
          cacheState = 0; // release failed, bail out
        } else {
          return; // close has been called more than once - ok
        }
      }
    }

    if (debugLeaks) {
      openFiles.remove(location);
      if (showOpen) System.out.println("  close " + location);
    }

    if (file == null)
      return;

    // If we are writing and the buffer has been modified, flush the contents of the buffer.
    flush();

    // may need to extend file, in case no fill is being used
    // may need to truncate file in case overwriting a longer file
    // use only if minLength is set (by N3iosp)
    long fileSize = file.length();
    if (!readonly && (minLength != 0) && (minLength != fileSize)) {
      file.setLength(minLength);
      // System.out.println("TRUNCATE!!! minlength="+minLength);
    }

    // Close the underlying file object.
    file.close();
    file = null;  // help the gc
  }
public synchronized void close() throws IOException {
    if (cache != null) {
      if (cacheState > 0) {
        if (cacheState == 1) {
          cacheState = 2;
          if (cache.release(this))  // return true if in the cache, otherwise was opened regular, so must be closed regular
            return;
          cacheState = 0; // release failed, bail out
        } else {
          return; // close has been called more than once - ok
        }
      }
    }

    if (debugLeaks) {
      openFiles.remove(location);
      if (showOpen) System.out.println("  close " + location);
    }

    if (file == null)
      return;

    // If we are writing and the buffer has been modified, flush the contents of the buffer.
    flush();

    // may need to extend file, in case no fill is being used
    // may need to truncate file in case overwriting a longer file
    // use only if minLength is set (by N3iosp)
    long fileSize = file.length();
    if (!readonly && (minLength != 0) && (minLength != fileSize)) {
      file.setLength(minLength);
      // System.out.println("TRUNCATE!!! minlength="+minLength);
    }

    // Close the underlying file object.
    file.close();
    file = null;  // help the gc
  }
Close the file, and release any associated system resources.

@throws IOException if an I/O error occurrs.