Class FilePath
- All Implemented Interfaces:
Serializable
,org.jenkinsci.remoting.SerializableOnlyOverRemoting
File
like object with remoting support.
Unlike File
, which always implies a file path on the current computer,
FilePath
represents a file path on a specific agent or the controller.
Despite that, FilePath
can be used much like File
. It exposes
a bunch of operations (and we should add more operations as long as they are
generally useful), and when invoked against a file on a remote node, FilePath
executes the necessary code remotely, thereby providing semi-transparent file
operations.
Using FilePath
smartly
The transparency makes it easy to write plugins without worrying too much about remoting, by making it works like NFS, where remoting happens at the file-system layer.
But one should note that such use of remoting may not be optional. Sometimes, it makes more sense to move some computation closer to the data, as opposed to move the data to the computation. For example, if you are just computing a MD5 digest of a file, then it would make sense to do the digest on the host where the file is located, as opposed to send the whole data to the controller and do MD5 digesting there.
FilePath
supports this "code migration" by in the
act(FileCallable)
method. One can pass in a custom implementation
of FilePath.FileCallable
, to be executed on the node where the data is located.
The following code shows the example:
void someMethod(FilePath file) { // make 'file' a fresh empty directory. file.act(new Freshen()); } // if 'file' is on a different node, this FileCallable will // be transferred to that node and executed there. private static final class Freshen implements FileCallable<Void> { private static final long serialVersionUID = 1; @Override public Void invoke(File f, VirtualChannel channel) { // f and file represent the same thing f.deleteContents(); f.mkdirs(); return null; } }
When FilePath.FileCallable
is transferred to a remote node, it will be done so
by using the same Java serialization scheme that the remoting module uses.
See Channel
for more about this.
FilePath
itself can be sent over to a remote node as a part of Callable
serialization. For example, sending a FilePath
of a remote node to that
node causes FilePath
to become "local". Similarly, sending a
FilePath
that represents the local computer causes it to become "remote."
- Author:
- Kohsuke Kawaguchi
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
AbstractDelegatingCallable
that exposes a Before/After pattern forFilePath.FileCallableWrapperFactory
that want to implement AOP-style interceptorsstatic enum
static final class
Helper class to make it easy to send an explicit list of files usingFilePath
methods.static interface
Code that gets executed on the machine where theFilePath
is local.static class
This extension point allows to contribute a wrapper around a fileCallable so that a plugin can "intercept" a call.static class
A dedicated subtype ofInterruptedException
for when no matching Ant file mask matches are found.static enum
Supported tar file compression methods. -
Field Summary
Modifier and TypeFieldDescriptionstatic final hudson.remoting.LocalChannel
Channel to the current instance.static final int
static int
Default bound forvalidateAntFileMask(String, int, boolean)
. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionAbsolutizes thisFilePath
and returns the new one.<T> T
act
(FilePath.FileCallable<T> callable) Executes some program on the machine that thisFilePath
exists, so that one can perform local file operations.<V,
E extends Throwable>
Vact
(hudson.remoting.Callable<V, E> callable) Executes some program on the machine that thisFilePath
exists, so that one can perform local file operations.<T> hudson.remoting.Future<T>
actAsync
(FilePath.FileCallable<T> callable) Executes some program on the machine that thisFilePath
exists, so that one can perform local file operations.int
archive
(ArchiverFactory factory, OutputStream os, DirScanner scanner) Archives this directory into the specified archive format, to the givenOutputStream
, by usingDirScanner
to choose what files to include.int
archive
(ArchiverFactory factory, OutputStream os, DirScanner scanner, String verificationRoot, OpenOption... openOptions) Archives this directory into the specified archive format, to the givenOutputStream
, by usingDirScanner
to choose what files to include.int
archive
(ArchiverFactory factory, OutputStream os, FileFilter filter) int
archive
(ArchiverFactory factory, OutputStream os, String glob) <V> hudson.remoting.Callable<V,
IOException> asCallableWith
(FilePath.FileCallable<V> task) The same asFilePath(FilePath,String)
but more OO.void
chmod
(int mask) Sets the file permission.boolean
containsSymlink
(FilePath verificationRoot, OpenOption... openOptions) void
Convenience method to callcopyTo(FilePath)
.void
copyFrom
(InputStream in) Replaces the content of this file by the data from the givenInputStream
.void
Reads the URL on the current VM, and streams the data to this file using the Remoting channel.void
copyFrom
(org.apache.commons.fileupload.FileItem file) Deprecated.void
copyFrom
(org.apache.commons.fileupload2.core.FileItem file) Place the data fromFileItem
into the file location specified by thisFilePath
object.int
copyRecursiveTo
(FilePath target) Copies the contents of this directory recursively into the specified target directory.int
copyRecursiveTo
(DirScanner scanner, FilePath target, String description) Copies files according to a specified scanner to a target node.int
copyRecursiveTo
(DirScanner scanner, FilePath target, String description, FilePath.TarCompression compression) Copies files according to a specified scanner to a target node.int
copyRecursiveTo
(String fileMask, FilePath target) Copies the files that match the given file mask to the specified target node.int
copyRecursiveTo
(String fileMask, String excludes, FilePath target) Copies the files that match the given file mask to the specified target node.void
Copies this file to the specified target.void
copyTo
(OutputStream os) Sends the contents of this file into the givenOutputStream
.void
copyToWithPermission
(FilePath target) Copies this file to the specified target, with file permissions and other meta attributes intact.createLauncher
(TaskListener listener) Creates aLauncher
for starting processes on the node that has this file.createTempDir
(String prefix, String suffix) Creates a temporary directory inside the directory represented by 'this'createTempFile
(String prefix, String suffix) Creates a temporary file in the directory that thisFilePath
object designates.createTextTempFile
(String prefix, String suffix, String contents) Creates a temporary file in this directory and set the contents to the given text (encoded in the platform default encoding)createTextTempFile
(String prefix, String suffix, String contents, boolean inThisDirectory) Creates a temporary file in this directory (or the system temporary directory) and set the contents to the given text (encoded in the platform default encoding)void
Deprecated.as of 1.315.void
createZipArchive
(OutputStream os, String glob) Deprecated.as of 1.315 Usezip(OutputStream,String)
that has more consistent name.boolean
delete()
Deletes this file.void
Deletes all the contents of this directory, but not the directory itselfvoid
Deletes this directory, including all its contents recursively.void
Deletes all suffixes recursively.digest()
Computes the MD5 digest of the file in hex string.boolean
boolean
exists()
Checks if the file exists.Gets the file name portion except the extension.hudson.remoting.VirtualChannel
long
Returns the number of unallocated bytes in the partition of that file.static FilePath
getHomeDirectory
(hudson.remoting.VirtualChannel ch) Gets theFilePath
representation of the "~" directory (User's home directory in the Unix sense) of the given channel.getName()
Gets just the file name portion without directories.Gets the parent file.Gets the full path of the file on the remote machine.long
Returns the total number of bytes in the partition of that file.long
Returns the number of usable bytes in the partition of that file.int
hashCode()
boolean
hasSymlink
(FilePath verificationRoot, OpenOption... openOptions) static FileVisitor
ignoringSymlinks
(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitor
to ignore symlinks.static FileVisitor
ignoringTmpDirs
(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitor
to ignore tmp directories.boolean
installIfNecessaryFrom
(URL archive, TaskListener listener, String message) Given a tgz/zip file, extracts it to the given target directory, if necessary.boolean
isDescendant
(String potentialChildRelativePath) Check if the relative child is really a descendant after symlink resolution if any.boolean
Checks if the file is a directory.static boolean
isIgnoreTmpDirs
(OpenOption... openOptions) static boolean
isNoFollowLink
(OpenOption... openOptions) boolean
isRemote()
Returns true if thisFilePath
represents a remote file.static boolean
isSymlink
(File file, String root, OpenOption... openOptions) static boolean
isTmpDir
(File file, String root, OpenOption... openOptions) static boolean
isTmpDir
(String filename, OpenOption... openOptions) long
Gets the last modified time stamp of this file, by using the clock of the machine where this file actually resides.long
length()
Returns the file size in bytes.list()
List up files and directories in this directory.list
(FilePath verificationRoot, OpenOption... openOptions) List up files and directories in this directory.list
(FileFilter filter) List up files in this directory, just likeFile.listFiles(FileFilter)
.FilePath[]
List up files in this directory that matches the given Ant-style filter.FilePath[]
List up files in this directory that matches the given Ant-style filter.FilePath[]
List up files in this directory that matches the given Ant-style filter.List up subdirectories.void
mkdirs()
Creates this directory.int
mode()
Gets the file permission bit mask.void
moveAllChildrenTo
(FilePath target) Moves all the contents of this directory into the specified directory, then delete this directory itself.static InputStream
newInputStreamDenyingSymlinkAsNeeded
(File file, String verificationRoot, OpenOption... openOptions) static String
File.getParent()
etc cannot handle ".." and "." in the path component very well, so remove them.static InputStream
openInputStream
(File file, OpenOption[] openOptions) read()
Reads this file.read
(FilePath rootPath, OpenOption... openOptions) readFromOffset
(long offset) Reads this file from the specific offset.readLink()
Resolves symlink, if the given file is a symlink.Reads this file into a string, by using the current system encoding on the remote machine.void
Rename this file/directory to the target filepath.Short forgetParent().child(rel)
.void
symlinkTo
(String target, TaskListener listener) Creates a symlink to the specified target.int
tar
(OutputStream out, DirScanner scanner) Uses the given scanner on 'this' directory to list up files and then archive it to a tar stream.int
tar
(OutputStream out, FileFilter filter) int
tar
(OutputStream out, String glob) Writes files in 'this' directory to a tar stream.toString()
Deprecated.void
touch
(long timestamp) Creates a file (if not already exist) and sets the timestamp.toURI()
Converts this file to the URI, relative to the machine on which this file is available.Gets theVirtualFile
representation of thisFilePath
void
untar
(FilePath target, FilePath.TarCompression compression) When thisFilePath
represents a tar file, extracts that tar file.void
untarFrom
(InputStream _in, FilePath.TarCompression compression) Reads the given InputStream as a tar file and extracts it into this directory.void
When thisFilePath
represents a zip file, extracts that zip file.void
unzipFrom
(InputStream _in) Reads the given InputStream as a zip file and extracts it into this directory.validateAntFileMask
(String fileMasks) Deprecated.usevalidateAntFileMask(String, int)
insteadvalidateAntFileMask
(String fileMasks, boolean caseSensitive) Same asvalidateAntFileMask(String, int, boolean)
with the default number of operations.validateAntFileMask
(String fileMasks, int bound) Same asvalidateAntFileMask(String, int, boolean)
with caseSensitive set to true.validateAntFileMask
(String fileMasks, int bound, boolean caseSensitive) Validates the ant file mask (like "foo/bar/*.txt, zot/*.jar") against this directory, and try to point out the problem.static FormValidation
validateFileMask
(FilePath path, String value) Short forvalidateFileMask(path, value, true)
static FormValidation
validateFileMask
(FilePath path, String value, boolean caseSensitive) Shortcut forvalidateFileMask(String,boolean,boolean)
witherrorIfNotExist
true, as the left-hand side can be null.validateFileMask
(String value) Short forvalidateFileMask(value, true, true)
validateFileMask
(String value, boolean errorIfNotExist) Short forvalidateFileMask(value, errorIfNotExist, true)
validateFileMask
(String value, boolean errorIfNotExist, boolean caseSensitive) Checks the GLOB-style file mask.validateRelativeDirectory
(String value) validateRelativeDirectory
(String value, boolean errorIfNotExist) A convenience method overvalidateRelativePath(String, boolean, boolean)
.validateRelativePath
(String value, boolean errorIfNotExist, boolean expectingFile) Validates a relative file path from thisFilePath
.withSuffix
(String suffix) Returns aFilePath
by adding the given suffix to this path name.write()
Writes to this file.void
Overwrites this file by placing the given String as the content.void
void
zip
(OutputStream os) Creates a zip file from this directory or a file and sends that to the given output stream.int
zip
(OutputStream out, DirScanner scanner) Uses the given scanner on 'this' directory to list up files and then archive it to a zip stream.int
zip
(OutputStream out, DirScanner scanner, String verificationRoot, String prefix, OpenOption... openOptions) Uses the given scanner on 'this' directory to list up files and then archive it to a zip stream.void
zip
(OutputStream os, FileFilter filter) Creates a zip file from this directory by using the specified filter, and sends the result to the given output stream.void
zip
(OutputStream os, String glob) Creates a zip file from this directory by only including the files that match the given glob.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.jenkinsci.remoting.SerializableOnlyOverRemoting
getChannelForSerialization
-
Field Details
-
VALIDATE_ANT_FILE_MASK_BOUND
public static int VALIDATE_ANT_FILE_MASK_BOUNDDefault bound forvalidateAntFileMask(String, int, boolean)
.- Since:
- 1.592
-
SIDE_BUFFER_SIZE
@Restricted(org.kohsuke.accmod.restrictions.NoExternalUse.class) @RestrictedSince("2.328") public static final int SIDE_BUFFER_SIZE- See Also:
-
localChannel
@NonNull public static final hudson.remoting.LocalChannel localChannelChannel to the current instance.
-
-
Constructor Details
-
FilePath
Creates aFilePath
that represents a path on the given node.- Parameters:
channel
- To create a path that represents a remote path, pass in aChannel
that's connected to that machine. Ifnull
, that means the local file path.
-
FilePath
To createFilePath
that represents a "local" path.A "local" path means a file path on the computer where the constructor invocation happened.
-
FilePath
Construct a path starting with a base location.- Parameters:
base
- starting point for resolution, and defines channelrel
- a path that when relative will be resolved against base
-
-
Method Details
-
normalize
@Restricted(org.kohsuke.accmod.restrictions.NoExternalUse.class) public static String normalize(@NonNull String path) File.getParent()
etc cannot handle ".." and "." in the path component very well, so remove them. -
getRemote
Gets the full path of the file on the remote machine. -
createZipArchive
Deprecated.as of 1.315. Usezip(OutputStream)
that has more consistent name.Creates a zip file from this directory or a file and sends that to the given output stream.- Throws:
IOException
InterruptedException
-
zip
Creates a zip file from this directory or a file and sends that to the given output stream.- Throws:
IOException
InterruptedException
-
zip
- Throws:
IOException
InterruptedException
-
zip
Creates a zip file from this directory by using the specified filter, and sends the result to the given output stream.- Parameters:
filter
- Must be serializable since it may be executed remotely. Can be null to add all files.- Throws:
IOException
InterruptedException
- Since:
- 1.315
-
createZipArchive
@Deprecated public void createZipArchive(OutputStream os, String glob) throws IOException, InterruptedException Deprecated.as of 1.315 Usezip(OutputStream,String)
that has more consistent name.Creates a zip file from this directory by only including the files that match the given glob.- Parameters:
glob
- Ant style glob, like "**/*.xml". If empty or null, this method works likecreateZipArchive(OutputStream)
- Throws:
IOException
InterruptedException
- Since:
- 1.129
-
zip
Creates a zip file from this directory by only including the files that match the given glob.- Parameters:
glob
- Ant style glob, like "**/*.xml". If empty or null, this method works likecreateZipArchive(OutputStream)
, inserting a top-level directory into the ZIP.- Throws:
IOException
InterruptedException
- Since:
- 1.315
-
zip
Uses the given scanner on 'this' directory to list up files and then archive it to a zip stream.- Throws:
IOException
InterruptedException
-
zip
public int zip(OutputStream out, DirScanner scanner, String verificationRoot, String prefix, OpenOption... openOptions) throws IOException, InterruptedException Uses the given scanner on 'this' directory to list up files and then archive it to a zip stream.- Parameters:
out
- The OutputStream to write the zip into.scanner
- A DirScanner for scanning the directory and filtering its contents.verificationRoot
- A root or base directory for checking for any symlinks in this files parentage. Any symlinks between a file and root should be ignored. Symlinks in the parentage outside root will not be checked.prefix
- The portion of file path that will be added at the beginning of the relative path inside the archive. If non-empty, a trailing forward slash will be enforced.openOptions
- the options to apply when opening.- Returns:
- The number of files/directories archived. This is only really useful to check for a situation where nothing
- Throws:
IOException
InterruptedException
-
archive
public int archive(ArchiverFactory factory, OutputStream os, DirScanner scanner) throws IOException, InterruptedException Archives this directory into the specified archive format, to the givenOutputStream
, by usingDirScanner
to choose what files to include.- Returns:
- number of files/directories archived. This is only really useful to check for a situation where nothing is archived.
- Throws:
IOException
InterruptedException
-
archive
public int archive(ArchiverFactory factory, OutputStream os, DirScanner scanner, String verificationRoot, OpenOption... openOptions) throws IOException, InterruptedException Archives this directory into the specified archive format, to the givenOutputStream
, by usingDirScanner
to choose what files to include.- Parameters:
factory
- The ArchiverFactory for creating the archive.os
- The OutputStream to write the zip into.verificationRoot
- A root or base directory for checking for any symlinks in this files parentage. Any symlinks between a file and root should be ignored. Symlinks in the parentage outside root will not be checked.openOptions
- options to apply when opening.- Returns:
- The number of files/directories archived. This is only really useful to check for a situation where nothing
- Throws:
IOException
InterruptedException
-
archive
public int archive(ArchiverFactory factory, OutputStream os, FileFilter filter) throws IOException, InterruptedException - Throws:
IOException
InterruptedException
-
archive
public int archive(ArchiverFactory factory, OutputStream os, String glob) throws IOException, InterruptedException - Throws:
IOException
InterruptedException
-
unzip
When thisFilePath
represents a zip file, extracts that zip file.- Parameters:
target
- Target directory to expand files to. All the necessary directories will be created.- Throws:
IOException
InterruptedException
- Since:
- 1.248
- See Also:
-
untar
public void untar(FilePath target, FilePath.TarCompression compression) throws IOException, InterruptedException When thisFilePath
represents a tar file, extracts that tar file.- Parameters:
target
- Target directory to expand files to. All the necessary directories will be created.compression
- Compression mode of this tar file.- Throws:
IOException
InterruptedException
- Since:
- 1.292
- See Also:
-
unzipFrom
Reads the given InputStream as a zip file and extracts it into this directory.- Parameters:
_in
- The stream will be closed by this method after it's fully read.- Throws:
IOException
InterruptedException
- Since:
- 1.283
- See Also:
-
absolutize
Absolutizes thisFilePath
and returns the new one.- Throws:
IOException
InterruptedException
-
hasSymlink
public boolean hasSymlink(FilePath verificationRoot, OpenOption... openOptions) throws IOException, InterruptedException - Throws:
IOException
InterruptedException
-
containsSymlink
public boolean containsSymlink(FilePath verificationRoot, OpenOption... openOptions) throws IOException, InterruptedException - Throws:
IOException
InterruptedException
-
symlinkTo
public void symlinkTo(String target, TaskListener listener) throws IOException, InterruptedException Creates a symlink to the specified target.- Parameters:
target
- The file that the symlink should point to.listener
- If symlink creation requires a help of an external process, the error will be reported here.- Throws:
IOException
InterruptedException
- Since:
- 1.456
-
readLink
Resolves symlink, if the given file is a symlink. Otherwise, return null.If the resolution fails, report an error.
- Throws:
IOException
InterruptedException
- Since:
- 1.456
-
equals
-
hashCode
public int hashCode() -
untarFrom
public void untarFrom(InputStream _in, FilePath.TarCompression compression) throws IOException, InterruptedException Reads the given InputStream as a tar file and extracts it into this directory.- Parameters:
_in
- The stream will be closed by this method after it's fully read.compression
- The compression method in use.- Throws:
IOException
InterruptedException
- Since:
- 1.292
-
installIfNecessaryFrom
public boolean installIfNecessaryFrom(@NonNull URL archive, @CheckForNull TaskListener listener, @NonNull String message) throws IOException, InterruptedException Given a tgz/zip file, extracts it to the given target directory, if necessary.This method is a convenience method designed for installing a binary package to a location that supports upgrade and downgrade. Specifically,
- If the target directory doesn't exist it will be created.
- The timestamp of the archive is left in the installation directory upon extraction.
- If the timestamp left in the directory does not match the timestamp of the current archive file, the directory contents will be discarded and the archive file will be re-extracted.
- If the connection is refused but the target directory already exists, it is left alone.
- Parameters:
archive
- The resource that represents the tgz/zip file. This URL must support theLast-Modified
header or theETag
header. (For example, you could useClassLoader.getResource(java.lang.String)
.)listener
- If non-null, a message will be printed to this listener once this method decides to extract an archive, or if there is any issue.message
- a message to be printed in case extraction will proceed.- Returns:
- true if the archive was extracted. false if the extraction was skipped because the target directory was considered up to date.
- Throws:
IOException
InterruptedException
- Since:
- 1.299
-
copyFrom
Reads the URL on the current VM, and streams the data to this file using the Remoting channel.This is different from resolving URL remotely. If you instead wished to open an HTTP(S) URL on the remote side, prefer
RobustHTTPClient.copyFromRemotely
.- Throws:
IOException
InterruptedException
- Since:
- 1.293
-
copyFrom
Replaces the content of this file by the data from the givenInputStream
.- Throws:
IOException
InterruptedException
- Since:
- 1.293
-
copyFrom
Convenience method to callcopyTo(FilePath)
.- Throws:
IOException
InterruptedException
- Since:
- 1.311
-
copyFrom
public void copyFrom(org.apache.commons.fileupload2.core.FileItem file) throws IOException, InterruptedException Place the data fromFileItem
into the file location specified by thisFilePath
object.- Throws:
IOException
InterruptedException
-
copyFrom
@Deprecated public void copyFrom(org.apache.commons.fileupload.FileItem file) throws IOException, InterruptedException Deprecated.- Throws:
IOException
InterruptedException
-
act
Executes some program on the machine that thisFilePath
exists, so that one can perform local file operations.- Throws:
IOException
InterruptedException
-
actAsync
public <T> hudson.remoting.Future<T> actAsync(FilePath.FileCallable<T> callable) throws IOException, InterruptedException Executes some program on the machine that thisFilePath
exists, so that one can perform local file operations.- Throws:
IOException
InterruptedException
-
act
public <V,E extends Throwable> V act(hudson.remoting.Callable<V, E> callable) throws IOException, InterruptedException, EExecutes some program on the machine that thisFilePath
exists, so that one can perform local file operations.- Throws:
IOException
InterruptedException
E extends Throwable
-
asCallableWith
Takes aFilePath
+FilePath.FileCallable
pair and returns the equivalentCallable
. When executing the resultingCallable
, it executesact(FileCallable)
on thisFilePath
.- Since:
- 1.522
-
toURI
Converts this file to the URI, relative to the machine on which this file is available.- Throws:
IOException
InterruptedException
-
toVirtualFile
Gets theVirtualFile
representation of thisFilePath
- Since:
- 1.532
-
toComputer
- Since:
- 1.571
-
mkdirs
Creates this directory.- Throws:
IOException
InterruptedException
-
deleteSuffixesRecursive
Deletes all suffixes recursively.- Throws:
IOException
- if it exists but could not be successfully deletedInterruptedException
- Since:
- 2.244
-
deleteRecursive
Deletes this directory, including all its contents recursively.- Throws:
IOException
InterruptedException
-
deleteContents
Deletes all the contents of this directory, but not the directory itself- Throws:
IOException
InterruptedException
-
getBaseName
Gets the file name portion except the extension. For example, "foo" for "foo.txt" and "foo.tar" for "foo.tar.gz". -
getName
Gets just the file name portion without directories. For example, "foo.txt" for "../abc/foo.txt" -
sibling
Short forgetParent().child(rel)
. Useful for getting other files in the same directory.- Returns:
- null if
getParent()
would have
-
withSuffix
Returns aFilePath
by adding the given suffix to this path name. -
child
The same asFilePath(FilePath,String)
but more OO.- Parameters:
relOrAbsolute
- a relative or absolute path- Returns:
- a file on the same channel
-
getParent
Gets the parent file.- Returns:
- parent FilePath or null if there is no parent
-
createTempFile
public FilePath createTempFile(String prefix, String suffix) throws IOException, InterruptedException Creates a temporary file in the directory that thisFilePath
object designates.- Parameters:
prefix
- The prefix string to be used in generating the file's name; must be at least three characters longsuffix
- The suffix string to be used in generating the file's name; may be null, in which case the suffix ".tmp" will be used- Returns:
- The new FilePath pointing to the temporary file
- Throws:
IOException
InterruptedException
- See Also:
-
createTextTempFile
public FilePath createTextTempFile(String prefix, String suffix, String contents) throws IOException, InterruptedException Creates a temporary file in this directory and set the contents to the given text (encoded in the platform default encoding)- Parameters:
prefix
- The prefix string to be used in generating the file's name; must be at least three characters longsuffix
- The suffix string to be used in generating the file's name; may be null, in which case the suffix ".tmp" will be usedcontents
- The initial contents of the temporary file.- Returns:
- The new FilePath pointing to the temporary file
- Throws:
IOException
InterruptedException
- See Also:
-
createTextTempFile
public FilePath createTextTempFile(String prefix, String suffix, String contents, boolean inThisDirectory) throws IOException, InterruptedException Creates a temporary file in this directory (or the system temporary directory) and set the contents to the given text (encoded in the platform default encoding)- Parameters:
prefix
- The prefix string to be used in generating the file's name; must be at least three characters longsuffix
- The suffix string to be used in generating the file's name; may be null, in which case the suffix ".tmp" will be usedcontents
- The initial contents of the temporary file.inThisDirectory
- If true, then create this temporary in the directory pointed to by this. If false, then the temporary file is created in the system temporary directory (java.io.tmpdir)- Returns:
- The new FilePath pointing to the temporary file
- Throws:
IOException
InterruptedException
- See Also:
-
createTempDir
public FilePath createTempDir(String prefix, String suffix) throws IOException, InterruptedException Creates a temporary directory inside the directory represented by 'this'- Parameters:
prefix
- The prefix string to be used in generating the directory's name; must be at least three characters longsuffix
- The suffix string to be used in generating the directory's name; may be null, in which case the suffix ".tmp" will be used- Returns:
- The new FilePath pointing to the temporary directory
- Throws:
IOException
InterruptedException
- Since:
- 1.311
- See Also:
-
delete
Deletes this file.- Returns:
- true, for a modicum of compatibility
- Throws:
IOException
- if it exists but could not be successfully deletedInterruptedException
-
exists
Checks if the file exists.- Throws:
IOException
InterruptedException
-
lastModified
Gets the last modified time stamp of this file, by using the clock of the machine where this file actually resides.- Throws:
IOException
InterruptedException
- See Also:
-
touch
Creates a file (if not already exist) and sets the timestamp.- Throws:
IOException
InterruptedException
- Since:
- 1.299
-
isDirectory
Checks if the file is a directory.- Throws:
IOException
InterruptedException
-
length
Returns the file size in bytes.- Throws:
IOException
InterruptedException
- Since:
- 1.129
-
getFreeDiskSpace
Returns the number of unallocated bytes in the partition of that file.- Throws:
IOException
InterruptedException
- Since:
- 1.542
-
getTotalDiskSpace
Returns the total number of bytes in the partition of that file.- Throws:
IOException
InterruptedException
- Since:
- 1.542
-
getUsableDiskSpace
Returns the number of usable bytes in the partition of that file.- Throws:
IOException
InterruptedException
- Since:
- 1.542
-
chmod
Sets the file permission. On Windows, no-op.- Parameters:
mask
- File permission mask. To simplify the permission copying, if the parameter is -1, this method becomes no-op.please note mask is expected to be an octal if you use chmod command line values, so preceded by a '0' in java notation, ie
chmod(0644)
Only supports setting read, write, or execute permissions for the owner, group, or others, so the largest permissible value is 0777. Attempting to set larger values (i.e. the setgid, setuid, or sticky bits) will cause an IOException to be thrown.
- Throws:
IOException
InterruptedException
- Since:
- 1.303
- See Also:
-
mode
Gets the file permission bit mask.- Returns:
- -1 on Windows, since such a concept doesn't make sense.
- Throws:
IOException
InterruptedException
- Since:
- 1.311
- See Also:
-
list
List up files and directories in this directory.This method returns direct children of the directory denoted by the 'this' object.
- Throws:
IOException
InterruptedException
-
list
@NonNull public List<FilePath> list(FilePath verificationRoot, OpenOption... openOptions) throws IOException, InterruptedException List up files and directories in this directory. This is intended to allow the caller to provideLinkOption.NOFOLLOW_LINKS
to ignore symlinks.- Parameters:
verificationRoot
- A root or base directory for checking for any symlinks in this files parentage. Any symlinks between a file and root should be ignored. Symlinks in the parentage outside root will not be checked.openOptions
- the options to apply when opening.- Returns:
- Direct children of this directory.
- Throws:
IOException
InterruptedException
-
listDirectories
List up subdirectories.- Returns:
- can be empty but never null. Doesn't contain "." and ".."
- Throws:
IOException
InterruptedException
-
list
List up files in this directory, just likeFile.listFiles(FileFilter)
.- Parameters:
filter
- The optional filter used to narrow down the result. If non-null, must beSerializable
. If thisFilePath
represents a remote path, the filter object will be executed on the remote machine.- Throws:
IOException
InterruptedException
-
list
List up files in this directory that matches the given Ant-style filter.- Parameters:
includes
- SeeFileSet
for the syntax. String like "foo/*.zip" or "foo/**/*.xml"- Returns:
- can be empty but always non-null.
- Throws:
IOException
InterruptedException
-
list
@NonNull public FilePath[] list(String includes, String excludes) throws IOException, InterruptedException List up files in this directory that matches the given Ant-style filter.- Parameters:
includes
- SeeFileSet
for the syntax. String like "foo/*.zip" or "foo/**/*.xml"excludes
- SeeFileSet
for the syntax. String like "foo/*.zip" or "foo/**/*.xml"- Returns:
- can be empty but always non-null.
- Throws:
IOException
InterruptedException
- Since:
- 1.407
-
list
@NonNull public FilePath[] list(String includes, String excludes, boolean defaultExcludes) throws IOException, InterruptedException List up files in this directory that matches the given Ant-style filter.- Parameters:
includes
- SeeFileSet
for the syntax. String like "foo/*.zip" or "foo/**/*.xml"excludes
- SeeFileSet
for the syntax. String like "foo/*.zip" or "foo/**/*.xml"defaultExcludes
- whether to use the ant default excludes- Returns:
- can be empty but always non-null.
- Throws:
IOException
InterruptedException
- Since:
- 1.465
-
read
Reads this file.- Throws:
IOException
InterruptedException
-
read
public InputStream read(FilePath rootPath, OpenOption... openOptions) throws IOException, InterruptedException - Throws:
IOException
InterruptedException
-
newInputStreamDenyingSymlinkAsNeeded
public static InputStream newInputStreamDenyingSymlinkAsNeeded(File file, String verificationRoot, OpenOption... openOptions) throws IOException - Throws:
IOException
-
openInputStream
- Throws:
IOException
-
isSymlink
-
isTmpDir
-
isTmpDir
-
isNoFollowLink
-
isIgnoreTmpDirs
-
readFromOffset
Reads this file from the specific offset.- Throws:
IOException
InterruptedException
- Since:
- 1.586
-
readToString
Reads this file into a string, by using the current system encoding on the remote machine.- Throws:
IOException
InterruptedException
-
write
Writes to this file. If this file already exists, it will be overwritten. If the directory doesn't exist, it will be created.I/O operation to remote
FilePath
happens asynchronously, meaning write operations to the returnedOutputStream
will return without receiving a confirmation from the remote that the write happened. I/O operations also happens asynchronously from theChannel.call(Callable)
operations, so if you write to a remote file and then executeChannel.call(Callable)
and try to access the newly copied file, it might not be fully written yet.- Throws:
IOException
InterruptedException
-
write
Overwrites this file by placing the given String as the content.- Parameters:
encoding
- Null to use the platform default encoding on the remote machine.- Throws:
IOException
InterruptedException
- Since:
- 1.105
-
digest
Computes the MD5 digest of the file in hex string.- Throws:
IOException
InterruptedException
- See Also:
-
renameTo
Rename this file/directory to the target filepath. This FilePath and the target must be on the same host- Throws:
IOException
InterruptedException
-
moveAllChildrenTo
Moves all the contents of this directory into the specified directory, then delete this directory itself.- Throws:
IOException
InterruptedException
- Since:
- 1.308.
-
copyTo
Copies this file to the specified target.- Throws:
IOException
InterruptedException
-
copyToWithPermission
Copies this file to the specified target, with file permissions and other meta attributes intact.- Throws:
IOException
InterruptedException
- Since:
- 1.311
-
copyTo
Sends the contents of this file into the givenOutputStream
.- Throws:
IOException
InterruptedException
-
copyRecursiveTo
Copies the contents of this directory recursively into the specified target directory.- Returns:
- the number of files copied.
- Throws:
IOException
InterruptedException
- Since:
- 1.312
-
copyRecursiveTo
public int copyRecursiveTo(String fileMask, FilePath target) throws IOException, InterruptedException Copies the files that match the given file mask to the specified target node.- Parameters:
fileMask
- Ant GLOB pattern. String like "foo/bar/*.xml" Multiple patterns can be separated by ',', and whitespace can surround ',' so that you can write "abc, def" and "abc,def" to mean the same thing.- Returns:
- the number of files copied.
- Throws:
IOException
InterruptedException
-
copyRecursiveTo
public int copyRecursiveTo(String fileMask, String excludes, FilePath target) throws IOException, InterruptedException Copies the files that match the given file mask to the specified target node.- Parameters:
fileMask
- Ant GLOB pattern. String like "foo/bar/*.xml" Multiple patterns can be separated by ',', and whitespace can surround ',' so that you can write "abc, def" and "abc,def" to mean the same thing.excludes
- Files to be excluded. Can be null.- Returns:
- the number of files copied.
- Throws:
IOException
InterruptedException
-
copyRecursiveTo
public int copyRecursiveTo(DirScanner scanner, FilePath target, String description) throws IOException, InterruptedException Copies files according to a specified scanner to a target node.- Parameters:
scanner
- a way of enumerating some files (must be serializable for possible delivery to remote side)target
- the destination basedirdescription
- a description of the fileset, for logging purposes- Returns:
- the number of files copied
- Throws:
IOException
InterruptedException
- Since:
- 1.532
-
copyRecursiveTo
public int copyRecursiveTo(DirScanner scanner, FilePath target, String description, @NonNull FilePath.TarCompression compression) throws IOException, InterruptedException Copies files according to a specified scanner to a target node.- Parameters:
scanner
- a way of enumerating some files (must be serializable for possible delivery to remote side)target
- the destination basedirdescription
- a description of the fileset, for logging purposescompression
- compression to use- Returns:
- the number of files copied
- Throws:
IOException
InterruptedException
- Since:
- 2.196
-
tar
Writes files in 'this' directory to a tar stream.- Parameters:
glob
- Ant file pattern mask, like "**/*.java".- Throws:
IOException
InterruptedException
-
tar
- Throws:
IOException
InterruptedException
-
tar
Uses the given scanner on 'this' directory to list up files and then archive it to a tar stream.- Throws:
IOException
InterruptedException
-
createLauncher
Creates aLauncher
for starting processes on the node that has this file.- Throws:
IOException
InterruptedException
- Since:
- 1.89
-
validateAntFileMask
@Deprecated public String validateAntFileMask(String fileMasks) throws IOException, InterruptedException Deprecated.usevalidateAntFileMask(String, int)
insteadSame asvalidateAntFileMask(String, int)
with (practically) unbounded number of operations.- Returns:
- null if no error was found. Otherwise, returns a human-readable error message.
- Throws:
IOException
InterruptedException
- Since:
- 1.90
- See Also:
-
validateAntFileMask
public String validateAntFileMask(String fileMasks, int bound) throws IOException, InterruptedException Same asvalidateAntFileMask(String, int, boolean)
with caseSensitive set to true.- Throws:
IOException
InterruptedException
-
validateAntFileMask
public String validateAntFileMask(String fileMasks, boolean caseSensitive) throws IOException, InterruptedException Same asvalidateAntFileMask(String, int, boolean)
with the default number of operations.- Throws:
IOException
InterruptedException
- Since:
- 2.325
- See Also:
-
validateAntFileMask
@CheckForNull public String validateAntFileMask(String fileMasks, int bound, boolean caseSensitive) throws IOException, InterruptedException Validates the ant file mask (like "foo/bar/*.txt, zot/*.jar") against this directory, and try to point out the problem. This performs only a bounded number of operations.Whereas the unbounded overload is appropriate for calling from cancelable, long-running tasks such as build steps, this overload should be used when an answer is needed quickly, such as for
validateFileMask(String)
or anything else returningFormValidation
.If a positive match is found,
null
is returned immediately. A message is returned in case the file pattern can definitely be determined to not match anything in the directory within the alloted time. If the time runs out without finding a match but without ruling out the possibility that there might be one,InterruptedException
is thrown, in which case the calling code should give the user the benefit of the doubt and useFormValidation.Kind.OK
(with or without a message).While this can be used in conjunction with
FormValidation
, it's generally better to usevalidateFileMask(String)
and its overloads for use indoCheck
form validation methods related to workspaces, as that performs an appropriate permission check. Callers of this method or its overloads from web methods should ensure permissions are checked before this method is invoked.- Parameters:
bound
- a maximum number of negative operations (deliberately left vague) to perform before giving up on a precise answer; tryVALIDATE_ANT_FILE_MASK_BOUND
- Throws:
InterruptedException
- not only in case of a channel failure, but also if too many operations were performed without finding any matchesIOException
- Since:
- 1.484
-
validateFileMask
public static FormValidation validateFileMask(@CheckForNull FilePath path, String value) throws IOException Short forvalidateFileMask(path, value, true)
- Throws:
IOException
-
validateFileMask
public static FormValidation validateFileMask(@CheckForNull FilePath path, String value, boolean caseSensitive) throws IOException Shortcut forvalidateFileMask(String,boolean,boolean)
witherrorIfNotExist
true, as the left-hand side can be null.- Throws:
IOException
-
validateFileMask
Short forvalidateFileMask(value, true, true)
- Throws:
IOException
-
validateFileMask
Short forvalidateFileMask(value, errorIfNotExist, true)
- Throws:
IOException
-
validateFileMask
public FormValidation validateFileMask(String value, boolean errorIfNotExist, boolean caseSensitive) throws IOException Checks the GLOB-style file mask. SeevalidateAntFileMask(String)
. Requires configure permission on ancestorAbstractProject
object in request, orJenkins.MANAGE
permission if no such ancestor is found.Note that this permission check may not always make sense based on the directory provided; callers should consider using
validateFileMask(FilePath, String, boolean)
and its overloads instead (once appropriate permission checks have succeeded).- Throws:
IOException
- Since:
- 1.294
-
validateRelativePath
public FormValidation validateRelativePath(String value, boolean errorIfNotExist, boolean expectingFile) throws IOException Validates a relative file path from thisFilePath
. Requires configure permission on ancestorAbstractProject
object in request, orJenkins.MANAGE
permission if no such ancestor is found.Note that this permission check may not always make sense based on the directory provided; callers should consider using
validateFileMask(FilePath, String, boolean)
and its overloads instead (once appropriate permission checks have succeeded).- Parameters:
value
- The relative path being validated.errorIfNotExist
- If true, report an error if the given relative path doesn't exist. Otherwise, it's a warning.expectingFile
- If true, we expect the relative path to point to a file. Otherwise, the relative path is expected to be pointing to a directory.- Throws:
IOException
-
validateRelativeDirectory
public FormValidation validateRelativeDirectory(String value, boolean errorIfNotExist) throws IOException A convenience method overvalidateRelativePath(String, boolean, boolean)
.- Throws:
IOException
-
validateRelativeDirectory
- Throws:
IOException
-
toString
Deprecated. -
getChannel
public hudson.remoting.VirtualChannel getChannel() -
isRemote
public boolean isRemote()Returns true if thisFilePath
represents a remote file. -
getHomeDirectory
public static FilePath getHomeDirectory(hudson.remoting.VirtualChannel ch) throws InterruptedException, IOException Gets theFilePath
representation of the "~" directory (User's home directory in the Unix sense) of the given channel.- Throws:
InterruptedException
IOException
-
ignoringSymlinks
public static FileVisitor ignoringSymlinks(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitor
to ignore symlinks. -
ignoringTmpDirs
public static FileVisitor ignoringTmpDirs(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitor
to ignore tmp directories. -
isDescendant
public boolean isDescendant(@NonNull String potentialChildRelativePath) throws IOException, InterruptedException Check if the relative child is really a descendant after symlink resolution if any.- Throws:
IOException
InterruptedException
-
copyFrom(FileItem)