Package org.wikidata.wdtk.util
Class DirectoryManagerImpl
java.lang.Object
org.wikidata.wdtk.util.DirectoryManagerImpl
- All Implemented Interfaces:
DirectoryManager
Class to read and write files from one directory. It is guaranteed that the
directory always exists (it is created if needed).
- Author:
- Markus Kroetzsch
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionlong
createFile
(String fileName, InputStream inputStream) Creates a new file in the current directory, and fill it with the data from the given input stream.void
createFile
(String fileName, String fileContents) Creates a new file in the current directory, and fill it with the given data, encoded in UTF-8.long
createFileAtomic
(String fileName, InputStream inputStream) Creates a new file in the current directory, and fill it with the data from the given input stream.protected InputStream
getCompressorInputStream
(InputStream inputStream, CompressionType compressionType) Returns an input stream that applies the required decompression to the given input stream.getInputStreamForFile
(String fileName, CompressionType compressionType) Returns an input stream to access file of the given name within the current directory, possibly uncompressing it if required.getOutputStreamForFile
(String fileName) Opens and returns an output stream that can be used to write to the file of the given name within the current directory.getSubdirectories
(String glob) Returns a list of the names of all subdirectories of the base directory.getSubdirectoryManager
(String subdirectoryName) Returns a new directory manager for the subdirectory of the given name.boolean
Checks if there is a file of the given name.boolean
hasSubdirectory
(String subdirectoryName) Checks if there is a subdirectory of the given name.toString()
-
Constructor Details
-
DirectoryManagerImpl
Constructor- Parameters:
baseDirectory
- the directory where the file manager should point initially; will be created if not existingreadOnly
- if false, the directory manager will attempt to create directories when changing to a location that does not exist- Throws:
IOException
- if there was a problem creating the directory
-
-
Method Details
-
toString
-
getSubdirectoryManager
Description copied from interface:DirectoryManager
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 withDirectoryManager.hasSubdirectory(String)
first (ignoring the fact that there might be race conditions when accessing the file system).- Specified by:
getSubdirectoryManager
in interfaceDirectoryManager
- Parameters:
subdirectoryName
- the string name of the subdirectory- Returns:
- DirectoryManager for subdirectory
- Throws:
IOException
- if directory could not be created
-
hasSubdirectory
Description copied from interface:DirectoryManager
Checks if there is a subdirectory of the given name.- Specified by:
hasSubdirectory
in interfaceDirectoryManager
- Parameters:
subdirectoryName
- the name of the subdirectory- Returns:
- true if the subdirectory exists
-
hasFile
Description copied from interface:DirectoryManager
Checks if there is a file of the given name.- Specified by:
hasFile
in interfaceDirectoryManager
- Parameters:
fileName
- the name of the file- Returns:
- true if the file exists and is not a directory
-
createFile
Description copied from interface:DirectoryManager
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.- Specified by:
createFile
in interfaceDirectoryManager
- Parameters:
fileName
- the name of the fileinputStream
- the input stream from which to load the file- Returns:
- size of the new file in bytes
- Throws:
IOException
-
createFileAtomic
Description copied from interface:DirectoryManager
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.
- Specified by:
createFileAtomic
in interfaceDirectoryManager
- Parameters:
fileName
- the name of the fileinputStream
- the input stream from which to load the file- Returns:
- size of the new file in bytes
- Throws:
IOException
-
createFile
Description copied from interface:DirectoryManager
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.- Specified by:
createFile
in interfaceDirectoryManager
- Parameters:
fileName
- the name of the filefileContents
- the data to write into the file- Throws:
IOException
-
getOutputStreamForFile
Description copied from interface:DirectoryManager
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.- Specified by:
getOutputStreamForFile
in interfaceDirectoryManager
- Parameters:
fileName
- the name of the file- Returns:
- the stream to write to
- Throws:
IOException
-
getInputStreamForFile
public InputStream getInputStreamForFile(String fileName, CompressionType compressionType) throws IOException Description copied from interface:DirectoryManager
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.
- Specified by:
getInputStreamForFile
in interfaceDirectoryManager
- Parameters:
fileName
- the name of the filecompressionType
- for types other thanCompressionType.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
-
getCompressorInputStream
protected InputStream getCompressorInputStream(InputStream inputStream, CompressionType compressionType) throws IOException Returns an input stream that applies the required decompression to the given input stream.- Parameters:
inputStream
- the input stream with the (possibly compressed) datacompressionType
- the kind of compression- Returns:
- an input stream with decompressed data
- Throws:
IOException
- if there was a problem creating the decompression streams
-
getSubdirectories
Description copied from interface:DirectoryManager
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.- Specified by:
getSubdirectories
in interfaceDirectoryManager
- Parameters:
glob
- pattern to filter directoy names- Returns:
- list of subdirectory names
- Throws:
IOException
-