Package org.apache.sshd.common.util.io
Class IoUtils
- java.lang.Object
-
- org.apache.sshd.common.util.io.IoUtils
-
public final class IoUtils extends java.lang.Object
TODO Add javadoc
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_COPY_SIZE
Size of preferred work buffer when reading / writing data to / from streamsstatic java.nio.file.CopyOption[]
EMPTY_COPY_OPTIONS
static java.nio.file.attribute.FileAttribute<?>[]
EMPTY_FILE_ATTRIBUTES
static java.nio.file.LinkOption[]
EMPTY_LINK_OPTIONS
static java.nio.file.OpenOption[]
EMPTY_OPEN_OPTIONS
static java.lang.String
EOL
The local O/S line separatorprivate static byte[]
EOL_BYTES
private static java.nio.file.LinkOption[]
NO_FOLLOW_OPTIONS
static java.util.List<java.lang.String>
WINDOWS_EXECUTABLE_EXTENSIONS
static java.util.Set<java.nio.file.StandardOpenOption>
WRITEABLE_OPEN_OPTIONS
ASet
ofStandardOpenOption
-s that indicate an intent to create/modify a file
-
Constructor Summary
Constructors Modifier Constructor Description private
IoUtils()
Private Constructor
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.String
appendPathComponent(java.lang.String prefix, java.lang.String component)
static java.lang.Boolean
checkFileExists(java.nio.file.Path path, java.nio.file.LinkOption... options)
Checks if a file exists - Note: according to the Java tutorial - Checking a File or Directory:static java.io.IOException
closeQuietly(java.io.Closeable c)
Closes the specifiedCloseable
resourcestatic java.io.IOException
closeQuietly(java.io.Closeable... closeables)
Closes a bunch of resources suppressing anyIOException
s theirCloseable.close()
method may have thrownstatic java.io.IOException
closeQuietly(java.util.Collection<? extends java.io.Closeable> closeables)
Closes a bunch of resources suppressing anyIOException
s theirCloseable.close()
method may have thrownstatic long
copy(java.io.InputStream source, java.io.OutputStream sink)
static long
copy(java.io.InputStream source, java.io.OutputStream sink, int bufferSize)
static java.nio.file.Path
ensureDirectory(java.nio.file.Path path, java.nio.file.LinkOption... options)
static boolean
followLinks(java.nio.file.LinkOption... options)
static byte[]
getEOLBytes()
static java.lang.String
getFileOwner(java.nio.file.Path path, java.nio.file.LinkOption... options)
Get file owner.static java.nio.file.LinkOption[]
getLinkOptions(boolean followLinks)
static java.util.Set<java.nio.file.attribute.PosixFilePermission>
getPermissions(java.nio.file.Path path, java.nio.file.LinkOption... options)
If the "posix" view is supported, then it returnsFiles.getPosixFilePermissions(Path, LinkOption...)
, otherwise uses thegetPermissionsFromFile(File)
methodstatic java.util.Set<java.nio.file.attribute.PosixFilePermission>
getPermissionsFromFile(java.io.File f)
static boolean
isExecutable(java.io.File f)
static boolean
isWindowsExecutable(java.lang.String fileName)
static int
read(java.io.InputStream input, byte[] buffer)
Read as many bytes as possible until EOF or achieved required lengthstatic int
read(java.io.InputStream input, byte[] buffer, int offset, int length)
Read as many bytes as possible until EOF or achieved required lengthstatic java.util.List<java.lang.String>
readAllLines(java.io.BufferedReader reader)
Reads all lines until no more availablestatic java.util.List<java.lang.String>
readAllLines(java.io.BufferedReader reader, int lineCountHint)
Reads all lines until no more availablestatic java.util.List<java.lang.String>
readAllLines(java.io.InputStream stream)
Reads all lines until no more availablestatic java.util.List<java.lang.String>
readAllLines(java.io.Reader reader)
static java.util.List<java.lang.String>
readAllLines(java.net.URL url)
Reads all lines until no more availablestatic void
readFully(java.io.InputStream input, byte[] buffer)
Read the requested number of bytes or fail if there are not enough left.static void
readFully(java.io.InputStream input, byte[] buffer, int offset, int length)
Read the requested number of bytes or fail if there are not enough left.static void
setPermissions(java.nio.file.Path path, java.util.Set<java.nio.file.attribute.PosixFilePermission> perms)
If the "posix" view is supported, then it invokesFiles.setPosixFilePermissions(Path, Set)
, otherwise uses thesetPermissionsToFile(File, Collection)
methodstatic void
setPermissionsToFile(java.io.File f, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)
static byte[]
toByteArray(java.io.InputStream inStream)
static java.nio.file.attribute.PosixFilePermission
validateExcludedPermissions(java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms, java.util.Collection<java.nio.file.attribute.PosixFilePermission> excluded)
-
-
-
Field Detail
-
EMPTY_OPEN_OPTIONS
public static final java.nio.file.OpenOption[] EMPTY_OPEN_OPTIONS
-
EMPTY_COPY_OPTIONS
public static final java.nio.file.CopyOption[] EMPTY_COPY_OPTIONS
-
EMPTY_LINK_OPTIONS
public static final java.nio.file.LinkOption[] EMPTY_LINK_OPTIONS
-
EMPTY_FILE_ATTRIBUTES
public static final java.nio.file.attribute.FileAttribute<?>[] EMPTY_FILE_ATTRIBUTES
-
WINDOWS_EXECUTABLE_EXTENSIONS
public static final java.util.List<java.lang.String> WINDOWS_EXECUTABLE_EXTENSIONS
-
DEFAULT_COPY_SIZE
public static final int DEFAULT_COPY_SIZE
Size of preferred work buffer when reading / writing data to / from streams- See Also:
- Constant Field Values
-
EOL
public static final java.lang.String EOL
The local O/S line separator
-
WRITEABLE_OPEN_OPTIONS
public static final java.util.Set<java.nio.file.StandardOpenOption> WRITEABLE_OPEN_OPTIONS
ASet
ofStandardOpenOption
-s that indicate an intent to create/modify a file
-
EOL_BYTES
private static final byte[] EOL_BYTES
-
NO_FOLLOW_OPTIONS
private static final java.nio.file.LinkOption[] NO_FOLLOW_OPTIONS
-
-
Method Detail
-
getEOLBytes
public static byte[] getEOLBytes()
- Returns:
- The local platform line separator bytes as UTF-8. Note: each call returns a new instance in order to avoid inadvertent changes in shared objects
- See Also:
EOL
-
getLinkOptions
public static java.nio.file.LinkOption[] getLinkOptions(boolean followLinks)
-
copy
public static long copy(java.io.InputStream source, java.io.OutputStream sink) throws java.io.IOException
- Throws:
java.io.IOException
-
copy
public static long copy(java.io.InputStream source, java.io.OutputStream sink, int bufferSize) throws java.io.IOException
- Throws:
java.io.IOException
-
closeQuietly
public static java.io.IOException closeQuietly(java.io.Closeable... closeables)
Closes a bunch of resources suppressing anyIOException
s theirCloseable.close()
method may have thrown- Parameters:
closeables
- TheCloseable
s to close- Returns:
- The first
IOException
that occurred during closing of a resource -null
if not exception. If more than one exception occurred, they are added as suppressed exceptions to the first one - See Also:
Throwable.getSuppressed()
-
closeQuietly
public static java.io.IOException closeQuietly(java.io.Closeable c)
Closes the specifiedCloseable
resource- Parameters:
c
- The resource to close - ignored ifnull
- Returns:
- The thrown
IOException
whenclose()
was called -null
if no exception was thrown (or no resource to close to begin with)
-
closeQuietly
public static java.io.IOException closeQuietly(java.util.Collection<? extends java.io.Closeable> closeables)
Closes a bunch of resources suppressing anyIOException
s theirCloseable.close()
method may have thrown- Parameters:
closeables
- TheCloseable
s to close- Returns:
- The first
IOException
that occurred during closing of a resource -null
if not exception. If more than one exception occurred, they are added as suppressed exceptions to the first one - See Also:
Throwable.getSuppressed()
-
isWindowsExecutable
public static boolean isWindowsExecutable(java.lang.String fileName)
- Parameters:
fileName
- The file name to be evaluated - ignored ifnull
/empty- Returns:
true
if the file ends in one of theWINDOWS_EXECUTABLE_EXTENSIONS
-
getPermissions
public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPermissions(java.nio.file.Path path, java.nio.file.LinkOption... options) throws java.io.IOException
If the "posix" view is supported, then it returnsFiles.getPosixFilePermissions(Path, LinkOption...)
, otherwise uses thegetPermissionsFromFile(File)
method- Parameters:
path
- ThePath
options
- TheLinkOption
s to use when querying the permissions- Returns:
- A
Set
ofPosixFilePermission
- Throws:
java.io.IOException
- If failed to access the file system in order to retrieve the permissions
-
getPermissionsFromFile
public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPermissionsFromFile(java.io.File f)
- Parameters:
f
- TheFile
to be checked- Returns:
- A
Set
ofPosixFilePermission
s based on whether the file is readable/writable/executable. If so, then all the relevant permissions are set (i.e., owner, group and others)
-
isExecutable
public static boolean isExecutable(java.io.File f)
-
setPermissions
public static void setPermissions(java.nio.file.Path path, java.util.Set<java.nio.file.attribute.PosixFilePermission> perms) throws java.io.IOException
If the "posix" view is supported, then it invokesFiles.setPosixFilePermissions(Path, Set)
, otherwise uses thesetPermissionsToFile(File, Collection)
method- Parameters:
path
- ThePath
perms
- TheSet
ofPosixFilePermission
s- Throws:
java.io.IOException
- If failed to access the file system
-
setPermissionsToFile
public static void setPermissionsToFile(java.io.File f, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)
- Parameters:
f
- TheFile
perms
- ACollection
ofPosixFilePermission
s to set on it. Note: the file is set to readable/writable/executable not only by the owner if any of relevant the owner/group/others permission is set
-
getFileOwner
public static java.lang.String getFileOwner(java.nio.file.Path path, java.nio.file.LinkOption... options) throws java.io.IOException
Get file owner.
- Parameters:
path
- ThePath
options
- TheLinkOption
s to use when querying the owner- Returns:
- Owner of the file or null if unsupported. Note: for Windows it strips any prepended domain or group name
- Throws:
java.io.IOException
- If failed to access the file system- See Also:
Files.getOwner(Path, LinkOption...)
-
checkFileExists
public static java.lang.Boolean checkFileExists(java.nio.file.Path path, java.nio.file.LinkOption... options)
Checks if a file exists - Note: according to the Java tutorial - Checking a File or Directory:
The methods in the Path class are syntactic, meaning that they operate on the Path instance. But eventually you must access the file system to verify that a particular Path exists, or does not exist. You can do so with the exists(Path, LinkOption...) and the notExists(Path, LinkOption...) methods. Note that !Files.exists(path) is not equivalent to Files.notExists(path). When you are testing a file's existence, three results are possible: - The file is verified to exist. - The file is verified to not exist. - The file's status is unknown. This result can occur when the program does not have access to the file. If both exists and notExists return false, the existence of the file cannot be verified.
- Parameters:
path
- ThePath
to be testedoptions
- TheLinkOption
s to use- Returns:
Boolean.TRUE
/Boolean.FALSE
ornull
according to the file status as explained above
-
readFully
public static void readFully(java.io.InputStream input, byte[] buffer) throws java.io.IOException
Read the requested number of bytes or fail if there are not enough left.- Parameters:
input
- where to read input frombuffer
- destination- Throws:
java.io.IOException
- if there is a problem reading the filejava.io.EOFException
- if the number of bytes read was incorrect
-
readFully
public static void readFully(java.io.InputStream input, byte[] buffer, int offset, int length) throws java.io.IOException
Read the requested number of bytes or fail if there are not enough left.- Parameters:
input
- where to read input frombuffer
- destinationoffset
- initial offset into bufferlength
- length to read, must be ≥ 0- Throws:
java.io.IOException
- if there is a problem reading the filejava.io.EOFException
- if the number of bytes read was incorrect
-
read
public static int read(java.io.InputStream input, byte[] buffer) throws java.io.IOException
Read as many bytes as possible until EOF or achieved required length- Parameters:
input
- where to read input frombuffer
- destination- Returns:
- actual length read; may be less than requested if EOF was reached
- Throws:
java.io.IOException
- if a read error occurs
-
read
public static int read(java.io.InputStream input, byte[] buffer, int offset, int length) throws java.io.IOException
Read as many bytes as possible until EOF or achieved required length- Parameters:
input
- where to read input frombuffer
- destinationoffset
- initial offset into bufferlength
- length to read - ignored if non-positive- Returns:
- actual length read; may be less than requested if EOF was reached
- Throws:
java.io.IOException
- if a read error occurs
-
validateExcludedPermissions
public static java.nio.file.attribute.PosixFilePermission validateExcludedPermissions(java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms, java.util.Collection<java.nio.file.attribute.PosixFilePermission> excluded)
- Parameters:
perms
- The currentPosixFilePermission
s - ignored ifnull
/emptyexcluded
- The permissions not allowed to exist - ignored ifnull
/empty- Returns:
- The violating
PosixFilePermission
-null
if no violating permission found
-
ensureDirectory
public static java.nio.file.Path ensureDirectory(java.nio.file.Path path, java.nio.file.LinkOption... options)
- Parameters:
path
- ThePath
to checkoptions
- TheLinkOption
s to use when checking if path is a directory- Returns:
- The same input path if it is a directory
- Throws:
java.lang.UnsupportedOperationException
- if input path not a directory
-
followLinks
public static boolean followLinks(java.nio.file.LinkOption... options)
- Parameters:
options
- TheLinkOption
s - OK ifnull
/empty- Returns:
true
if the link options arenull
/empty or do not containLinkOption.NOFOLLOW_LINKS
,false
otherwise (i.e., the array is not empty and contains the special value)
-
appendPathComponent
public static java.lang.String appendPathComponent(java.lang.String prefix, java.lang.String component)
-
toByteArray
public static byte[] toByteArray(java.io.InputStream inStream) throws java.io.IOException
- Throws:
java.io.IOException
-
readAllLines
public static java.util.List<java.lang.String> readAllLines(java.net.URL url) throws java.io.IOException
Reads all lines until no more available- Parameters:
url
- TheURL
to read from- Returns:
- The
List
of lines in the same order as it was read - Throws:
java.io.IOException
- If failed to read the lines- See Also:
readAllLines(InputStream)
-
readAllLines
public static java.util.List<java.lang.String> readAllLines(java.io.InputStream stream) throws java.io.IOException
Reads all lines until no more available- Parameters:
stream
- TheInputStream
- Note: assumed to containUTF-8
encoded data- Returns:
- The
List
of lines in the same order as it was read - Throws:
java.io.IOException
- If failed to read the lines- See Also:
readAllLines(Reader)
-
readAllLines
public static java.util.List<java.lang.String> readAllLines(java.io.Reader reader) throws java.io.IOException
- Throws:
java.io.IOException
-
readAllLines
public static java.util.List<java.lang.String> readAllLines(java.io.BufferedReader reader) throws java.io.IOException
Reads all lines until no more available- Parameters:
reader
- TheBufferedReader
to read all lines- Returns:
- The
List
of lines in the same order as it was read - Throws:
java.io.IOException
- If failed to read the lines- See Also:
readAllLines(BufferedReader, int)
-
readAllLines
public static java.util.List<java.lang.String> readAllLines(java.io.BufferedReader reader, int lineCountHint) throws java.io.IOException
Reads all lines until no more available- Parameters:
reader
- TheBufferedReader
to read all lineslineCountHint
- A hint as to the expected number of lines - non-positive means unknown - in which case some initial default value will be used to initialize the list used to accumulate the lines.- Returns:
- The
List
of lines in the same order as it was read - Throws:
java.io.IOException
- If failed to read the lines
-
-