Interface DirectoryManager

All Known Implementing Classes:
DirectoryManagerImpl, MockDirectoryManager

public interface DirectoryManager
Interface for classes that read and write files from one directory. Allows for mock implementations to test functionality without actually writing files.
Author:
Markus Kroetzsch
  • Method Details

    • getSubdirectoryManager

      DirectoryManager getSubdirectoryManager(String subdirectoryName) throws IOException
      Returns a new directory manager for the subdirectory of the given name. If the subdirectory does not exist yet, it will be created. If this is not desired, its existence can be checked with hasSubdirectory(String) first (ignoring the fact that there might be race conditions when accessing the file system).
      Parameters:
      subdirectoryName - the string name of the subdirectory
      Returns:
      DirectoryManager for subdirectory
      Throws:
      IOException - if directory could not be created
    • hasSubdirectory

      boolean hasSubdirectory(String subdirectoryName)
      Checks if there is a subdirectory of the given name.
      Parameters:
      subdirectoryName - the name of the subdirectory
      Returns:
      true if the subdirectory exists
    • hasFile

      boolean hasFile(String fileName)
      Checks if there is a file of the given name.
      Parameters:
      fileName - the name of the file
      Returns:
      true if the file exists and is not a directory
    • createFile

      long createFile(String fileName, InputStream inputStream) throws IOException
      Creates a new file in the current directory, and fill it with the data from the given input stream. If the stream encodes a string, then it should generally be encoded in UTF-8, since access methods assume this.
      Parameters:
      fileName - the name of the file
      inputStream - the input stream from which to load the file
      Returns:
      size of the new file in bytes
      Throws:
      IOException
    • createFileAtomic

      long createFileAtomic(String fileName, InputStream inputStream) throws IOException
      Creates a new file in the current directory, and fill it with the data from the given input stream. This is done by first writing the data to a temporary file that uses a suffix to the file name, and then moving the completed file to the new location. This should be used when fetching larger files through from slow stream (e.g., a download) to prevent partially finished file downloads lying around if the program is terminated during download. The temporary file will still be lying around, but it will not be mistaken for the completed download by any other parts of the program.

      If the stream encodes a string, then it should generally be encoded in UTF-8, since access methods assume this.

      Parameters:
      fileName - the name of the file
      inputStream - the input stream from which to load the file
      Returns:
      size of the new file in bytes
      Throws:
      IOException
    • createFile

      void createFile(String fileName, String fileContents) throws IOException
      Creates a new file in the current directory, and fill it with the given data, encoded in UTF-8. Should only be used for short pieces of data.
      Parameters:
      fileName - the name of the file
      fileContents - the data to write into the file
      Throws:
      IOException
    • getOutputStreamForFile

      OutputStream getOutputStreamForFile(String fileName) throws IOException
      Opens and returns an output stream that can be used to write to the file of the given name within the current directory. The stream is owned by the caller and must be closed after use. If the file already exists, it will be truncated at this operation.
      Parameters:
      fileName - the name of the file
      Returns:
      the stream to write to
      Throws:
      IOException
    • getInputStreamForFile

      InputStream getInputStreamForFile(String fileName, CompressionType compressionType) throws IOException
      Returns an input stream to access file of the given name within the current directory, possibly uncompressing it if required.

      It is important to close the stream after using it to free memory.

      Parameters:
      fileName - the name of the file
      compressionType - for types other than CompressionType.NONE, the file will be uncompressed appropriately and the returned input stream will provide access to the uncompressed content
      Returns:
      an InputStream to fetch data from the file
      Throws:
      IOException
    • getSubdirectories

      List<String> getSubdirectories(String glob) throws IOException
      Returns a list of the names of all subdirectories of the base directory. The glob pattern can be used to filter the names; "*" should be used if no filtering is desired.
      Parameters:
      glob - pattern to filter directoy names
      Returns:
      list of subdirectory names
      Throws:
      IOException