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.input;
    18
    19  import java.io.BufferedInputStream;
    20  import java.io.InputStream;
    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 GeometryInput} implementation for reading content from a file.
    29   */
    30  public class FileGeometryInput extends AbstractGeometryIOMetadata
    31      implements GeometryInput {
    32
    33      /** Input file. */
    34      private final Path file;
    35
    36      /** Construct a new instance for reading from the given file.
    37       * @param file input file
    38       */
    39      public FileGeometryInput(final Path file) {
    40          this(file, null);
    41      }
    42
    43      /** Construct a new instance for reading from the given file with the
    44       * specific charset.
    45       * @param file input file
    46       * @param charset charset to use when reading from the input file
    47       */
    48      public FileGeometryInput(final Path file, final Charset charset) {
    49          super(GeometryIOUtils.getFileName(file), charset);
    50
    51          this.file = file;
    52      }
    53
    54      /** Get the input file.
    55       * @return input file
    56       */
    57      public Path getFile() {
    58          return file;
    59      }
    60
    61      /** {@inheritDoc}
    62       *
    63       * <p>The returned input stream is buffered.</p>
    64       */
    65      @Override
    66      public InputStream getInputStream() {
    67          return GeometryIOUtils.getUnchecked(() -> new BufferedInputStream(Files.newInputStream(file)));
    68      }
    69
    70      /** {@inheritDoc} */
    71      @Override
    72      public String toString() {
    73          final StringBuilder sb = new StringBuilder();
    74          sb.append(getClass().getSimpleName())
    75              .append("[file= ")
    76              .append(getFile())
    77              .append(']');
    78
    79          return sb.toString();
    80      }
    81  }