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
Nested ClassesModifier and TypeClassDescriptionstatic classAbstractDelegatingCallablethat exposes a Before/After pattern forFilePath.FileCallableWrapperFactorythat want to implement AOP-style interceptorsstatic enumstatic final classHelper class to make it easy to send an explicit list of files usingFilePathmethods.static interfaceCode that gets executed on the machine where theFilePathis local.static classThis extension point allows to contribute a wrapper around a fileCallable so that a plugin can "intercept" a call.static classA dedicated subtype ofInterruptedExceptionfor when no matching Ant file mask matches are found.static enumSupported tar file compression methods. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final hudson.remoting.LocalChannelChannel to the current instance.static final intstatic intDefault bound forvalidateAntFileMask(String, int, boolean). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionAbsolutizes thisFilePathand returns the new one.<T> Tact(FilePath.FileCallable<T> callable) Executes some program on the machine that thisFilePathexists, 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 thisFilePathexists, 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 thisFilePathexists, so that one can perform local file operations.intarchive(ArchiverFactory factory, OutputStream os, DirScanner scanner) Archives this directory into the specified archive format, to the givenOutputStream, by usingDirScannerto choose what files to include.intarchive(ArchiverFactory factory, OutputStream os, DirScanner scanner, String verificationRoot, OpenOption... openOptions) Archives this directory into the specified archive format, to the givenOutputStream, by usingDirScannerto choose what files to include.intarchive(ArchiverFactory factory, OutputStream os, FileFilter filter) intarchive(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.voidchmod(int mask) Sets the file permission.booleancontainsSymlink(FilePath verificationRoot, OpenOption... openOptions) voidConvenience method to callcopyTo(FilePath).voidcopyFrom(InputStream in) Replaces the content of this file by the data from the givenInputStream.voidReads the URL on the current VM, and streams the data to this file using the Remoting channel.voidcopyFrom(org.apache.commons.fileupload.FileItem file) Deprecated.voidcopyFrom(org.apache.commons.fileupload2.core.FileItem file) Place the data fromFileIteminto the file location specified by thisFilePathobject.intcopyRecursiveTo(FilePath target) Copies the contents of this directory recursively into the specified target directory.intcopyRecursiveTo(DirScanner scanner, FilePath target, String description) Copies files according to a specified scanner to a target node.intcopyRecursiveTo(DirScanner scanner, FilePath target, String description, FilePath.TarCompression compression) Copies files according to a specified scanner to a target node.intcopyRecursiveTo(String fileMask, FilePath target) Copies the files that match the given file mask to the specified target node.intcopyRecursiveTo(String fileMask, String excludes, FilePath target) Copies the files that match the given file mask to the specified target node.voidCopies this file to the specified target.voidcopyTo(OutputStream os) Sends the contents of this file into the givenOutputStream.voidcopyToWithPermission(FilePath target) Copies this file to the specified target, with file permissions and other meta attributes intact.createLauncher(TaskListener listener) Creates aLauncherfor 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 thisFilePathobject 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)voidDeprecated.as of 1.315.voidcreateZipArchive(OutputStream os, String glob) Deprecated.as of 1.315 Usezip(OutputStream,String)that has more consistent name.booleandelete()Deletes this file.voidDeletes all the contents of this directory, but not the directory itselfvoidDeletes this directory, including all its contents recursively.voidDeletes all suffixes recursively.digest()Computes the MD5 digest of the file in hex string.booleanbooleanexists()Checks if the file exists.Gets the file name portion except the extension.hudson.remoting.VirtualChannellongReturns the number of unallocated bytes in the partition of that file.static FilePathgetHomeDirectory(hudson.remoting.VirtualChannel ch) Gets theFilePathrepresentation 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.longReturns the total number of bytes in the partition of that file.longReturns the number of usable bytes in the partition of that file.inthashCode()booleanhasSymlink(FilePath verificationRoot, OpenOption... openOptions) static FileVisitorignoringSymlinks(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitorto ignore symlinks.static FileVisitorignoringTmpDirs(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitorto ignore tmp directories.booleaninstallIfNecessaryFrom(URL archive, TaskListener listener, String message) Given a tgz/zip file, extracts it to the given target directory, if necessary.booleanisDescendant(String potentialChildRelativePath) Check if the relative child is really a descendant after symlink resolution if any.booleanChecks if the file is a directory.static booleanisIgnoreTmpDirs(OpenOption... openOptions) static booleanisNoFollowLink(OpenOption... openOptions) booleanisRemote()Returns true if thisFilePathrepresents a remote file.static booleanisSymlink(File file, String root, OpenOption... openOptions) static booleanisTmpDir(File file, String root, OpenOption... openOptions) static booleanisTmpDir(String filename, OpenOption... openOptions) longGets the last modified time stamp of this file, by using the clock of the machine where this file actually resides.longlength()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.voidmkdirs()Creates this directory.intmode()Gets the file permission bit mask.voidmoveAllChildrenTo(FilePath target) Moves all the contents of this directory into the specified directory, then delete this directory itself.static InputStreamnewInputStreamDenyingSymlinkAsNeeded(File file, String verificationRoot, OpenOption... openOptions) static StringFile.getParent()etc cannot handle ".." and "." in the path component very well, so remove them.static InputStreamopenInputStream(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.voidRename this file/directory to the target filepath.Short forgetParent().child(rel).voidsymlinkTo(String target, TaskListener listener) Creates a symlink to the specified target.inttar(OutputStream out, DirScanner scanner) Uses the given scanner on 'this' directory to list up files and then archive it to a tar stream.inttar(OutputStream out, FileFilter filter) inttar(OutputStream out, String glob) Writes files in 'this' directory to a tar stream.toString()Deprecated.voidtouch(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 theVirtualFilerepresentation of thisFilePathvoiduntar(FilePath target, FilePath.TarCompression compression) When thisFilePathrepresents a tar file, extracts that tar file.voiduntarFrom(InputStream _in, FilePath.TarCompression compression) Reads the given InputStream as a tar file and extracts it into this directory.voidWhen thisFilePathrepresents a zip file, extracts that zip file.voidunzipFrom(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 FormValidationvalidateFileMask(FilePath path, String value) Short forvalidateFileMask(path, value, true)static FormValidationvalidateFileMask(FilePath path, String value, boolean caseSensitive) Shortcut forvalidateFileMask(String,boolean,boolean)witherrorIfNotExisttrue, 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 aFilePathby adding the given suffix to this path name.write()Writes to this file.voidOverwrites this file by placing the given String as the content.voidvoidzip(OutputStream os) Creates a zip file from this directory or a file and sends that to the given output stream.intzip(OutputStream out, DirScanner scanner) Uses the given scanner on 'this' directory to list up files and then archive it to a zip stream.intzip(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.voidzip(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.voidzip(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, waitMethods 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 aFilePaththat represents a path on the given node.- Parameters:
channel- To create a path that represents a remote path, pass in aChannelthat's connected to that machine. Ifnull, that means the local file path.
-
FilePath
To createFilePaththat 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:
IOExceptionInterruptedException
-
zip
Creates a zip file from this directory or a file and sends that to the given output stream.- Throws:
IOExceptionInterruptedException
-
zip
- Throws:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- Since:
- 1.315
-
zip
Uses the given scanner on 'this' directory to list up files and then archive it to a zip stream.- Throws:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException
-
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 usingDirScannerto 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:
IOExceptionInterruptedException
-
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 usingDirScannerto 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:
IOExceptionInterruptedException
-
archive
public int archive(ArchiverFactory factory, OutputStream os, FileFilter filter) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
archive
public int archive(ArchiverFactory factory, OutputStream os, String glob) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
unzip
When thisFilePathrepresents a zip file, extracts that zip file.- Parameters:
target- Target directory to expand files to. All the necessary directories will be created.- Throws:
IOExceptionInterruptedException- Since:
- 1.248
- See Also:
-
untar
public void untar(FilePath target, FilePath.TarCompression compression) throws IOException, InterruptedException When thisFilePathrepresents 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- Since:
- 1.283
- See Also:
-
absolutize
Absolutizes thisFilePathand returns the new one.- Throws:
IOExceptionInterruptedException
-
hasSymlink
public boolean hasSymlink(FilePath verificationRoot, OpenOption... openOptions) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
containsSymlink
public boolean containsSymlink(FilePath verificationRoot, OpenOption... openOptions) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException- Since:
- 1.456
-
readLink
Resolves symlink, if the given file is a symlink. Otherwise, return null.If the resolution fails, report an error.
- Throws:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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-Modifiedheader or theETagheader. (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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- Since:
- 1.293
-
copyFrom
Replaces the content of this file by the data from the givenInputStream.- Throws:
IOExceptionInterruptedException- Since:
- 1.293
-
copyFrom
Convenience method to callcopyTo(FilePath).- Throws:
IOExceptionInterruptedException- Since:
- 1.311
-
copyFrom
public void copyFrom(org.apache.commons.fileupload2.core.FileItem file) throws IOException, InterruptedException Place the data fromFileIteminto the file location specified by thisFilePathobject.- Throws:
IOExceptionInterruptedException
-
copyFrom
@Deprecated public void copyFrom(org.apache.commons.fileupload.FileItem file) throws IOException, InterruptedException Deprecated.- Throws:
IOExceptionInterruptedException
-
act
Executes some program on the machine that thisFilePathexists, so that one can perform local file operations.- Throws:
IOExceptionInterruptedException
-
actAsync
public <T> hudson.remoting.Future<T> actAsync(FilePath.FileCallable<T> callable) throws IOException, InterruptedException Executes some program on the machine that thisFilePathexists, so that one can perform local file operations.- Throws:
IOExceptionInterruptedException
-
act
public <V,E extends Throwable> V act(hudson.remoting.Callable<V, E> callable) throws IOException, InterruptedException, EExecutes some program on the machine that thisFilePathexists, so that one can perform local file operations.- Throws:
IOExceptionInterruptedExceptionE
-
asCallableWith
Takes aFilePath+FilePath.FileCallablepair 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:
IOExceptionInterruptedException
-
toVirtualFile
Gets theVirtualFilerepresentation of thisFilePath- Since:
- 1.532
-
toComputer
- Since:
- 1.571
-
mkdirs
Creates this directory.- Throws:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException
-
deleteContents
Deletes all the contents of this directory, but not the directory itself- Throws:
IOExceptionInterruptedException
-
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 aFilePathby 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 thisFilePathobject 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException
-
lastModified
Gets the last modified time stamp of this file, by using the clock of the machine where this file actually resides.- Throws:
IOExceptionInterruptedException- See Also:
-
touch
Creates a file (if not already exist) and sets the timestamp.- Throws:
IOExceptionInterruptedException- Since:
- 1.299
-
isDirectory
Checks if the file is a directory.- Throws:
IOExceptionInterruptedException
-
length
Returns the file size in bytes.- Throws:
IOExceptionInterruptedException- Since:
- 1.129
-
getFreeDiskSpace
Returns the number of unallocated bytes in the partition of that file.- Throws:
IOExceptionInterruptedException- Since:
- 1.542
-
getTotalDiskSpace
Returns the total number of bytes in the partition of that file.- Throws:
IOExceptionInterruptedException- Since:
- 1.542
-
getUsableDiskSpace
Returns the number of usable bytes in the partition of that file.- Throws:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException
-
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_LINKSto 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:
IOExceptionInterruptedException
-
listDirectories
List up subdirectories.- Returns:
- can be empty but never null. Doesn't contain "." and ".."
- Throws:
IOExceptionInterruptedException
-
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 thisFilePathrepresents a remote path, the filter object will be executed on the remote machine.- Throws:
IOExceptionInterruptedException
-
list
List up files in this directory that matches the given Ant-style filter.- Parameters:
includes- SeeFileSetfor the syntax. String like "foo/*.zip" or "foo/**/*.xml"- Returns:
- can be empty but always non-null.
- Throws:
IOExceptionInterruptedException
-
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- SeeFileSetfor the syntax. String like "foo/*.zip" or "foo/**/*.xml"excludes- SeeFileSetfor the syntax. String like "foo/*.zip" or "foo/**/*.xml"- Returns:
- can be empty but always non-null.
- Throws:
IOExceptionInterruptedException- 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- SeeFileSetfor the syntax. String like "foo/*.zip" or "foo/**/*.xml"excludes- SeeFileSetfor 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:
IOExceptionInterruptedException- Since:
- 1.465
-
read
Reads this file.- Throws:
IOExceptionInterruptedException
-
read
public InputStream read(FilePath rootPath, OpenOption... openOptions) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException- Since:
- 1.586
-
readToString
Reads this file into a string, by using the current system encoding on the remote machine.- Throws:
IOExceptionInterruptedException
-
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
FilePathhappens asynchronously, meaning write operations to the returnedOutputStreamwill 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:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException- Since:
- 1.105
-
digest
Computes the MD5 digest of the file in hex string.- Throws:
IOExceptionInterruptedException- See Also:
-
renameTo
Rename this file/directory to the target filepath. This FilePath and the target must be on the same host- Throws:
IOExceptionInterruptedException
-
moveAllChildrenTo
Moves all the contents of this directory into the specified directory, then delete this directory itself.- Throws:
IOExceptionInterruptedException- Since:
- 1.308.
-
copyTo
Copies this file to the specified target.- Throws:
IOExceptionInterruptedException
-
copyToWithPermission
Copies this file to the specified target, with file permissions and other meta attributes intact.- Throws:
IOExceptionInterruptedException- Since:
- 1.311
-
copyTo
Sends the contents of this file into the givenOutputStream.- Throws:
IOExceptionInterruptedException
-
copyRecursiveTo
Copies the contents of this directory recursively into the specified target directory.- Returns:
- the number of files copied.
- Throws:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException
-
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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- Since:
- 2.196
-
tar
Writes files in 'this' directory to a tar stream.- Parameters:
glob- Ant file pattern mask, like "**/*.java".- Throws:
IOExceptionInterruptedException
-
tar
- Throws:
IOExceptionInterruptedException
-
tar
Uses the given scanner on 'this' directory to list up files and then archive it to a tar stream.- Throws:
IOExceptionInterruptedException
-
createLauncher
Creates aLauncherfor starting processes on the node that has this file.- Throws:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException- 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:
IOExceptionInterruptedException
-
validateAntFileMask
public String validateAntFileMask(String fileMasks, boolean caseSensitive) throws IOException, InterruptedException Same asvalidateAntFileMask(String, int, boolean)with the default number of operations.- Throws:
IOExceptionInterruptedException- 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,
nullis 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,InterruptedExceptionis 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 indoCheckform 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)witherrorIfNotExisttrue, 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 ancestorAbstractProjectobject in request, orJenkins.MANAGEpermission 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 ancestorAbstractProjectobject in request, orJenkins.MANAGEpermission 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 thisFilePathrepresents a remote file. -
getHomeDirectory
public static FilePath getHomeDirectory(hudson.remoting.VirtualChannel ch) throws InterruptedException, IOException Gets theFilePathrepresentation of the "~" directory (User's home directory in the Unix sense) of the given channel.- Throws:
InterruptedExceptionIOException
-
ignoringSymlinks
public static FileVisitor ignoringSymlinks(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitorto ignore symlinks. -
ignoringTmpDirs
public static FileVisitor ignoringTmpDirs(FileVisitor v, String verificationRoot, OpenOption... openOptions) WrapsFileVisitorto 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:
IOExceptionInterruptedException
-
copyFrom(FileItem)