Package org.apache.jmeter.services
Class FileServer
- java.lang.Object
-
- org.apache.jmeter.services.FileServer
-
public class FileServer extends Object
The point of this class is to provide thread-safe access to files, and to provide some simplifying assumptions about where to find files and how to name them. For instance, putting supporting files in the same directory as the saved test plan file allows users to refer to the file with just it's name - this FileServer class will find the file without a problem. Eventually, I want all in-test file access to be done through here, with the goal of packaging up entire test plans as a directory structure that can be sent via rmi to remote servers (currently, one must make sure the remote server has all support files in a relative-same location) and to package up test plans to execute on unknown boxes that only have Java installed.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
closeFile(String name)
void
closeFiles()
String
getBaseDir()
File
getBaseDirRelative()
Calculates the relative path fromDEFAULT_BASE
to the current base, which must be the same as or a child of the default.static String
getDefaultBase()
static FileServer
getFileServer()
String[]
getParsedLine(String alias, boolean recycle, boolean firstLineIsNames, char delim)
File
getRandomFile(String basedir, String[] extensions)
Method will get a random file in a base directoryString
getScriptName()
String
readLine(String filename)
Get the next line of the named file, recycle by default.String
readLine(String filename, boolean recycle)
Get the next line of the named file, first line is name to falseString
readLine(String filename, boolean recycle, boolean firstLineIsNames)
Get the next line of the named file.void
reserveFile(String filename)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.void
reserveFile(String filename, String charsetName)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.void
reserveFile(String filename, String charsetName, String alias)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.String
reserveFile(String filename, String charsetName, String alias, boolean hasHeader)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.void
resetBase()
Resets the current base toDEFAULT_BASE
.static String
resolveBaseRelativeName(String relativeName)
Resolve a file name that may be relative to the base directory.void
setBase(File jmxBase)
Sets the current base directory for relative file names.void
setBasedir(String basedir)
Sets the current base directory for relative file names from the provided path.void
setBaseForScript(File scriptPath)
Sets the current base directory for relative file names from the provided script file.void
setScriptName(String scriptName)
void
write(String filename, String value)
-
-
-
Method Detail
-
getFileServer
public static FileServer getFileServer()
- Returns:
- the singleton instance of the server.
-
resetBase
public void resetBase()
Resets the current base toDEFAULT_BASE
.
-
setBasedir
public void setBasedir(String basedir)
Sets the current base directory for relative file names from the provided path. If the path does not refer to an existing directory, then its parent is used. Normally the provided path is a file, so using the parent directory is appropriate.- Parameters:
basedir
- the path to set, ornull
if the GUI is being cleared- Throws:
IllegalStateException
- if files are still open
-
setBaseForScript
public void setBaseForScript(File scriptPath)
Sets the current base directory for relative file names from the provided script file. The parameter is assumed to be the path to a JMX file, so the base directory is derived from its parent.- Parameters:
scriptPath
- the path of the script file; must be not benull
- Throws:
IllegalStateException
- if files are still openIllegalArgumentException
- if scriptPath parameter is null
-
setBase
public void setBase(File jmxBase)
Sets the current base directory for relative file names.- Parameters:
jmxBase
- the path of the script file base directory, cannot be null- Throws:
IllegalStateException
- if files are still openIllegalArgumentException
- ifbasepath
is null
-
getBaseDir
public String getBaseDir()
-
getDefaultBase
public static String getDefaultBase()
-
getBaseDirRelative
public File getBaseDirRelative()
Calculates the relative path fromDEFAULT_BASE
to the current base, which must be the same as or a child of the default.- Returns:
- the relative path, or
"."
if the path cannot be determined
-
reserveFile
public void reserveFile(String filename)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.- Parameters:
filename
- - relative (to base) or absolute file name (must not be null)
-
reserveFile
public void reserveFile(String filename, String charsetName)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.- Parameters:
filename
- - relative (to base) or absolute file name (must not be null)charsetName
- - the character set encoding to use for the file (may be null)
-
reserveFile
public void reserveFile(String filename, String charsetName, String alias)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.- Parameters:
filename
- - relative (to base) or absolute file name (must not be null)charsetName
- - the character set encoding to use for the file (may be null)alias
- - the name to be used to access the object (must not be null)
-
reserveFile
public String reserveFile(String filename, String charsetName, String alias, boolean hasHeader)
Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.- Parameters:
filename
- - relative (to base) or absolute file name (must not be null)charsetName
- - the character set encoding to use for the file (may be null)alias
- - the name to be used to access the object (must not be null)hasHeader
- true if the file has a header line describing the contents- Returns:
- the header line; may be null
-
readLine
public String readLine(String filename) throws IOException
Get the next line of the named file, recycle by default.- Parameters:
filename
- the filename or alias that was used to reserve the file- Returns:
- String containing the next line in the file
- Throws:
IOException
- when reading of the file fails, or the file was not reserved properly
-
readLine
public String readLine(String filename, boolean recycle) throws IOException
Get the next line of the named file, first line is name to false- Parameters:
filename
- the filename or alias that was used to reserve the filerecycle
- - should file be restarted at EOF?- Returns:
- String containing the next line in the file (null if EOF reached and not recycle)
- Throws:
IOException
- when reading of the file fails, or the file was not reserved properly
-
readLine
public String readLine(String filename, boolean recycle, boolean firstLineIsNames) throws IOException
Get the next line of the named file.- Parameters:
filename
- the filename or alias that was used to reserve the filerecycle
- - should file be restarted at EOF?firstLineIsNames
- - 1st line is fields names- Returns:
- String containing the next line in the file (null if EOF reached and not recycle)
- Throws:
IOException
- when reading of the file fails, or the file was not reserved properly
-
getParsedLine
public String[] getParsedLine(String alias, boolean recycle, boolean firstLineIsNames, char delim) throws IOException
- Parameters:
alias
- the file name or aliasrecycle
- whether the file should be re-started on EOFfirstLineIsNames
- whether the file contains a file headerdelim
- the delimiter to use for parsing- Returns:
- the parsed line, will be empty if the file is at EOF
- Throws:
IOException
- when reading of the aliased file fails, or the file was not reserved properly
-
write
public void write(String filename, String value) throws IOException
- Throws:
IOException
-
closeFiles
public void closeFiles() throws IOException
- Throws:
IOException
-
closeFile
public void closeFile(String name) throws IOException
- Parameters:
name
- the name or alias of the file to be closed- Throws:
IOException
- when closing of the aliased file fails
-
getRandomFile
public File getRandomFile(String basedir, String[] extensions)
Method will get a random file in a base directoryTODO hey, not sure this method belongs here. FileServer is for threadsafe File access relative to current test's base directory.
- Parameters:
basedir
- name of the directory in which the files can be foundextensions
- array of allowed extensions, ifnull
is given, any file be allowed- Returns:
- a random File from the
basedir
that matches one of the extensions
-
resolveBaseRelativeName
public static String resolveBaseRelativeName(String relativeName)
Resolve a file name that may be relative to the base directory. If the name begins with the value of the JMeter property "jmeter.save.saveservice.base_prefix" - default "~/" - then the name is assumed to be relative to the basename.- Parameters:
relativeName
- filename that should be checked forjmeter.save.saveservice.base_prefix
- Returns:
- the updated filename
-
getScriptName
public String getScriptName()
- Returns:
- JMX Script name
- Since:
- 2.6
-
setScriptName
public void setScriptName(String scriptName)
- Parameters:
scriptName
- Script name- Since:
- 2.6
-
-