public class CachedFile extends java.lang.Object implements java.io.Closeable
resource:
) to get
resources from the current *.jar file. (Local caching is only done for URLs.)
The mirrored file is only downloaded if it has been more than 7 days since last download. (Time can be configured.)
The file content is normally accessed with getInputStream()
, but
you can also get the mirrored copy with getFile()
.
Modifier and Type | Class and Description |
---|---|
static class |
CachedFile.CachingStrategy
Caching strategy.
|
Modifier and Type | Field and Description |
---|---|
private HttpClient |
activeConnection |
protected java.io.File |
cacheFile |
protected CachedFile.CachingStrategy |
cachingStrategy |
static long |
DAYS |
static long |
DEFAULT_MAXTIME |
protected java.lang.String |
destDir |
private boolean |
fastFail |
protected java.lang.String |
httpAccept |
private java.util.Map<java.lang.String,java.lang.String> |
httpHeaders |
protected boolean |
initialized |
protected long |
maxAge |
protected java.lang.String |
name |
Constructor and Description |
---|
CachedFile(java.lang.String name)
Constructs a CachedFile object from a given filename, URL or internal resource.
|
Modifier and Type | Method and Description |
---|---|
private java.io.File |
checkLocal(java.net.URL url) |
private static void |
checkOfflineAccess(java.lang.String urlString) |
static void |
cleanup(java.lang.String name)
Clear the cache for the given resource.
|
static void |
cleanup(java.lang.String name,
java.lang.String destDir)
Clear the cache for the given resource.
|
void |
clear()
Clears the cached file
|
void |
close()
Attempts to disconnect an URL connection.
|
private Pair<java.lang.String,java.io.InputStream> |
findZipEntryImpl(java.lang.String extension,
java.lang.String namepart) |
java.io.InputStream |
findZipEntryInputStream(java.lang.String extension,
java.lang.String namepart)
Like
findZipEntryPath(java.lang.String, java.lang.String) , but returns the corresponding InputStream. |
java.lang.String |
findZipEntryPath(java.lang.String extension,
java.lang.String namepart)
Looks for a certain entry inside a zip file and returns the entry path.
|
byte[] |
getByteContent()
Get the full content of the requested resource as a byte array.
|
CachedFile.CachingStrategy |
getCachingStrategy() |
java.io.BufferedReader |
getContentReader()
Returns
getInputStream() wrapped in a buffered reader. |
java.lang.String |
getDestDir() |
java.io.File |
getFile()
Get local file for the requested resource.
|
java.lang.String |
getHttpAccept() |
java.io.InputStream |
getInputStream()
Get InputStream to the requested resource.
|
long |
getMaxAge()
Returns maximum age of cache file.
|
java.lang.String |
getName() |
private static java.lang.String |
getPrefKey(java.net.URL url,
java.lang.String destDir)
Get preference key to store the location and age of the cached file.
|
CachedFile |
setCachingStrategy(CachedFile.CachingStrategy cachingStrategy)
Set the caching strategy.
|
CachedFile |
setDestDir(java.lang.String destDir)
Set the destination directory for the cache file.
|
void |
setFastFail(boolean fastFail)
Sets whether opening HTTP connections should fail fast, i.e., whether a
low connect timeout should be used. |
CachedFile |
setHttpAccept(java.lang.String httpAccept)
Set the accepted MIME types sent in the HTTP Accept header.
|
CachedFile |
setHttpHeaders(java.util.Map<java.lang.String,java.lang.String> headers)
Sets the http headers.
|
CachedFile |
setMaxAge(long maxAge)
Set maximum age of cache file.
|
CachedFile |
setName(java.lang.String name)
Set the name of the resource.
|
protected java.lang.String name
protected long maxAge
protected java.lang.String destDir
protected java.lang.String httpAccept
protected CachedFile.CachingStrategy cachingStrategy
private boolean fastFail
private HttpClient activeConnection
protected java.io.File cacheFile
protected boolean initialized
public static final long DEFAULT_MAXTIME
public static final long DAYS
private final java.util.Map<java.lang.String,java.lang.String> httpHeaders
public CachedFile(java.lang.String name)
name
- can be:file:///SOME/FILE
the same as abovehttp://...
a URL. It will be cached on disk.resource://SOME/FILE
file from the classpath (usually in the current *.jar)josmdir://SOME/FILE
file inside josm user data directory (since r7058)josmplugindir://SOME/FILE
file inside josm plugin directory (since r7834)public CachedFile setName(java.lang.String name)
name
- can be:file:///SOME/FILE
the same as abovehttp://...
a URL. It will be cached on disk.resource://SOME/FILE
file from the classpath (usually in the current *.jar)josmdir://SOME/FILE
file inside josm user data directory (since r7058)josmplugindir://SOME/FILE
file inside josm plugin directory (since r7834)public CachedFile setMaxAge(long maxAge)
maxAge
- the maximum cache age in secondspublic CachedFile setDestDir(java.lang.String destDir)
destDir
- the destination directorypublic CachedFile setHttpAccept(java.lang.String httpAccept)
httpAccept
- the accepted MIME typespublic CachedFile setCachingStrategy(CachedFile.CachingStrategy cachingStrategy)
cachingStrategy
- caching strategypublic CachedFile setHttpHeaders(java.util.Map<java.lang.String,java.lang.String> headers)
headers
- that should be sent together with requestpublic void setFastFail(boolean fastFail)
low connect timeout
should be used.fastFail
- whether opening HTTP connections should fail fastpublic java.lang.String getName()
public long getMaxAge()
public java.lang.String getDestDir()
public java.lang.String getHttpAccept()
public CachedFile.CachingStrategy getCachingStrategy()
public java.io.InputStream getInputStream() throws java.io.IOException
java.io.IOException
- when the resource with the given name could not be retrievedpublic byte[] getByteContent() throws java.io.IOException
java.io.IOException
- in case of an I/O errorpublic java.io.BufferedReader getContentReader() throws java.io.IOException
getInputStream()
wrapped in a buffered reader.
Detects Unicode charset in use utilizing UTFInputStreamReader
.
java.io.IOException
- if any I/O error occurspublic java.io.File getFile() throws java.io.IOException
java.io.IOException
- when the resource with the given name could not be retrievedpublic java.lang.String findZipEntryPath(java.lang.String extension, java.lang.String namepart)
extension
. If more than one files have this
extension, the last file whose name includes namepart
is opened.extension
- the extension of the file we're looking fornamepart
- the name partpublic java.io.InputStream findZipEntryInputStream(java.lang.String extension, java.lang.String namepart)
findZipEntryPath(java.lang.String, java.lang.String)
, but returns the corresponding InputStream.extension
- the extension of the file we're looking fornamepart
- the name partprivate Pair<java.lang.String,java.io.InputStream> findZipEntryImpl(java.lang.String extension, java.lang.String namepart)
public static void cleanup(java.lang.String name)
name
- the URLpublic static void cleanup(java.lang.String name, java.lang.String destDir)
name
- the URLdestDir
- the destination directory (see setDestDir(java.lang.String)
)private static java.lang.String getPrefKey(java.net.URL url, java.lang.String destDir)
url
- URLdestDir
- destination directoryprivate java.io.File checkLocal(java.net.URL url) throws java.io.IOException
java.io.IOException
private static void checkOfflineAccess(java.lang.String urlString)
public void close()
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
HttpClient.disconnect()
public void clear() throws java.io.IOException
java.io.IOException
- if any I/O error occurs