code: private FileOutputStream openOutputStreamInternal(Long length, AccessCondition accessCondition,
              FileRequestOptions options, OperationContext opContext) throws StorageException, URISyntaxException {
          if (opContext == null) {
              opContext = new OperationContext();
          }
  
          this.getShare().assertNoSnapshot();
  
          options = FileRequestOptions.populateAndApplyDefaults(options, this.fileServiceClient, false /* setStartTime */);
  
          if (length != null) {
              this.create(length, accessCondition, options, opContext);
          }
          else {
              if (options.getStoreFileContentMD5()) {
                  throw new IllegalArgumentException(SR.FILE_MD5_NOT_POSSIBLE);
              }
  
              this.downloadAttributes(accessCondition, options, opContext);
              length = this.getProperties().getLength();
          }
  
          if (accessCondition != null) {
              accessCondition = AccessCondition.generateLeaseCondition(accessCondition.getLeaseID());
          }
  
          return new FileOutputStream(this, length, accessCondition, options, opContext);
      }
docs: Opens an output stream object to write data to the file, using the specified lease ID, request options and
  operation context. If the length is specified, a new file will be created with the length specified.
  Otherwise, the file must already exist and a stream of its current length will be opened.
  
  @param length
  A <code>long</code> which represents the length, in bytes, of the stream to create. This value must be
  null if the file already exists.
  @param accessCondition
  An {@link AccessCondition} object which represents the access conditions for the file.
  @param options
  A {@link FileRequestOptions} object that specifies any additional options for the request. Specifying
  <code>null</code> will use the default request options from the associated service client (
  {@link CloudFileClient}).
  @param opContext
  An {@link OperationContext} object which represents the context for the current operation. This object
  is used to track requests to the storage service, and to provide additional runtime information about
  the operation.
  
  @return A {@link FileOutputStream} object used to write data to the file.
  
  @throws StorageException
  If a storage service error occurred.
  @throws URISyntaxException