View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  package org.apache.commons.geometry.io.core.output;
    18
    19  import java.io.BufferedOutputStream;
    20  import java.io.OutputStream;
    21  import java.nio.charset.Charset;
    22  import java.nio.file.Files;
    23  import java.nio.file.Path;
    24
    25  import org.apache.commons.geometry.io.core.AbstractGeometryIOMetadata;
    26  import org.apache.commons.geometry.io.core.internal.GeometryIOUtils;
    27
    28  /** {@link GeometryOutput} implementation for writing content to a file.
    29   */
    30  public class FileGeometryOutput extends AbstractGeometryIOMetadata
    31      implements GeometryOutput {
    32
    33      /** File to write to. */
    34      private final Path file;
    35
    36      /** Construct a new instance with the given file and no charset.
    37       * @param file output file
    38       */
    39      public FileGeometryOutput(final Path file) {
    40          this(file, null);
    41      }
    42
    43      /** Construct a new instance with the given file and charset.
    44       * @param file output file
    45       * @param charset file charset
    46       */
    47      public FileGeometryOutput(final Path file, final Charset charset) {
    48          super(GeometryIOUtils.getFileName(file), charset);
    49
    50          this.file = file;
    51      }
    52
    53      /** Get the output file.
    54       * @return output file
    55       */
    56      public Path getFile() {
    57          return file;
    58      }
    59
    60      /** {@inheritDoc}
    61       *
    62       * <p>The returned output stream is buffered.</p>
    63       */
    64      @Override
    65      public OutputStream getOutputStream() {
    66          return GeometryIOUtils.getUnchecked(() -> new BufferedOutputStream(Files.newOutputStream(file)));
    67      }
    68
    69      /** {@inheritDoc} */
    70      @Override
    71      public String toString() {
    72          final StringBuilder sb = new StringBuilder();
    73          sb.append(getClass().getSimpleName())
    74              .append("[file= ")
    75              .append(getFile())
    76              .append(']');
    77
    78          return sb.toString();
    79      }
    80  }