Added TEMP_DIR to OS. Code polish.

This commit is contained in:
nathan 2017-06-26 14:05:31 +02:00
parent 66dc5447a0
commit 083aab845a
4 changed files with 54 additions and 31 deletions

View File

@ -30,8 +30,6 @@ import java.util.Locale;
public public
class CacheUtil { class CacheUtil {
public static final File TEMP_DIR = new File(System.getProperty("java.io.tmpdir"));
// will never be null. // will never be null.
private static final MessageDigest digest; private static final MessageDigest digest;
@ -57,7 +55,7 @@ class CacheUtil {
void clear() { void clear() {
// deletes all of the files (recursively) in the specified location. If the directory is empty (no locked files), then the // deletes all of the files (recursively) in the specified location. If the directory is empty (no locked files), then the
// directory is also deleted. // directory is also deleted.
FileUtil.delete(new File(TEMP_DIR, tempDir)); FileUtil.delete(new File(OS.TEMP_DIR, tempDir));
} }
@ -67,9 +65,9 @@ class CacheUtil {
* This cache is not persisted across runs. * This cache is not persisted across runs.
*/ */
public static synchronized public static synchronized
File check(File file) throws IOException { File check(final File file) {
if (file == null) { if (file == null) {
throw new IOException("file cannot be null"); throw new NullPointerException("file");
} }
// if we already have this fileName, reuse it // if we already have this fileName, reuse it
@ -80,13 +78,14 @@ class CacheUtil {
* Checks to see if the specified file is in the cache. NULL if it is not, otherwise specifies a location on disk. * Checks to see if the specified file is in the cache. NULL if it is not, otherwise specifies a location on disk.
*/ */
public static synchronized public static synchronized
File check(String fileName) throws IOException { File check(final String fileName) {
if (fileName == null) { if (fileName == null) {
throw new IOException("fileName cannot be null"); throw new NullPointerException("fileName");
} }
// if we already have this fileName, reuse it // if we already have this fileName, reuse it
File newFile = makeCacheFile(fileName); File newFile = makeCacheFile(fileName);
// if this file already exists (via HASH), we just reuse what is saved on disk. // if this file already exists (via HASH), we just reuse what is saved on disk.
if (newFile.canRead() && newFile.isFile()) { if (newFile.canRead() && newFile.isFile()) {
return newFile; return newFile;
@ -99,12 +98,11 @@ class CacheUtil {
* Checks to see if the specified URL is in the cache. NULL if it is not, otherwise specifies a location on disk. * Checks to see if the specified URL is in the cache. NULL if it is not, otherwise specifies a location on disk.
*/ */
public static synchronized public static synchronized
File check(final URL fileResource) throws IOException { File check(final URL fileResource) {
if (fileResource == null) { if (fileResource == null) {
throw new IOException("fileResource cannot be null"); throw new NullPointerException("fileResource");
} }
return check(fileResource.getPath()); return check(fileResource.getPath());
} }
@ -115,7 +113,7 @@ class CacheUtil {
public static synchronized public static synchronized
File check(final InputStream fileStream) throws IOException { File check(final InputStream fileStream) throws IOException {
if (fileStream == null) { if (fileStream == null) {
throw new IOException("fileStream cannot be null"); throw new NullPointerException("fileStream");
} }
return check(null, fileStream); return check(null, fileStream);
@ -128,7 +126,7 @@ class CacheUtil {
public static synchronized public static synchronized
File check(String cacheName, final InputStream fileStream) throws IOException { File check(String cacheName, final InputStream fileStream) throws IOException {
if (fileStream == null) { if (fileStream == null) {
throw new IOException("fileStream cannot be null"); throw new NullPointerException("fileStream");
} }
if (cacheName == null) { if (cacheName == null) {
@ -137,6 +135,7 @@ class CacheUtil {
// if we already have this fileName, reuse it // if we already have this fileName, reuse it
File newFile = makeCacheFile(cacheName); File newFile = makeCacheFile(cacheName);
// if this file already exists (via HASH), we just reuse what is saved on disk. // if this file already exists (via HASH), we just reuse what is saved on disk.
if (newFile.canRead() && newFile.isFile()) { if (newFile.canRead() && newFile.isFile()) {
return newFile; return newFile;
@ -195,6 +194,7 @@ class CacheUtil {
// if we already have this fileName, reuse it // if we already have this fileName, reuse it
File newFile = makeCacheFile(cacheName); File newFile = makeCacheFile(cacheName);
// if this file already exists (via HASH), we just reuse what is saved on disk. // if this file already exists (via HASH), we just reuse what is saved on disk.
if (newFile.canRead() && newFile.isFile()) { if (newFile.canRead() && newFile.isFile()) {
return newFile; return newFile;
@ -239,6 +239,7 @@ class CacheUtil {
// if we already have this fileName, reuse it // if we already have this fileName, reuse it
File newFile = makeCacheFile(cacheName); File newFile = makeCacheFile(cacheName);
// if this file already exists (via HASH), we just reuse what is saved on disk. // if this file already exists (via HASH), we just reuse what is saved on disk.
if (newFile.canRead() && newFile.isFile()) { if (newFile.canRead() && newFile.isFile()) {
return newFile; return newFile;
@ -256,7 +257,7 @@ class CacheUtil {
public static synchronized public static synchronized
File save(final InputStream fileStream) throws IOException { File save(final InputStream fileStream) throws IOException {
if (fileStream == null) { if (fileStream == null) {
throw new IOException("fileStream cannot be null"); throw new NullPointerException("fileStream");
} }
return save(null, fileStream); return save(null, fileStream);
@ -274,6 +275,7 @@ class CacheUtil {
// if we already have this fileName, reuse it // if we already have this fileName, reuse it
File newFile = makeCacheFile(cacheName); File newFile = makeCacheFile(cacheName);
// if this file already exists (via HASH), we just reuse what is saved on disk. // if this file already exists (via HASH), we just reuse what is saved on disk.
if (newFile.canRead() && newFile.isFile()) { if (newFile.canRead() && newFile.isFile()) {
return newFile; return newFile;
@ -294,6 +296,8 @@ class CacheUtil {
/** /**
* must be called from synchronized block!
*
* @param cacheName needs name+extension for the resource * @param cacheName needs name+extension for the resource
* @param resourceStream the resource to copy to a file on disk * @param resourceStream the resource to copy to a file on disk
* *
@ -301,12 +305,17 @@ class CacheUtil {
*/ */
@SuppressWarnings("ResultOfMethodCallIgnored") @SuppressWarnings("ResultOfMethodCallIgnored")
private static private static
File makeFileViaStream(String cacheName, final InputStream resourceStream) throws IOException { File makeFileViaStream(final String cacheName, final InputStream resourceStream) throws IOException {
if (resourceStream == null) { if (resourceStream == null) {
throw new IOException("resourceStream is null"); throw new NullPointerException("resourceStream");
}
if (cacheName == null) {
throw new NullPointerException("cacheName");
} }
File newFile = makeCacheFile(cacheName); File newFile = makeCacheFile(cacheName);
// if this file already exists (via HASH), we just reuse what is saved on disk. // if this file already exists (via HASH), we just reuse what is saved on disk.
if (newFile.canRead() && newFile.isFile()) { if (newFile.canRead() && newFile.isFile()) {
return newFile.getAbsoluteFile(); return newFile.getAbsoluteFile();
@ -324,7 +333,7 @@ class CacheUtil {
} catch (IOException e) { } catch (IOException e) {
// Send up exception // Send up exception
String message = "Unable to copy '" + cacheName + "' to temporary location: '" + newFile.getAbsolutePath() + "'"; String message = "Unable to copy '" + cacheName + "' to temporary location: '" + newFile.getAbsolutePath() + "'";
throw new RuntimeException(message, e); throw new IOException(message, e);
} finally { } finally {
try { try {
resourceStream.close(); resourceStream.close();
@ -342,20 +351,30 @@ class CacheUtil {
return newFile.getAbsoluteFile(); return newFile.getAbsoluteFile();
} }
/**
* @param cacheName the name of the file to use in the cache. This file name can use invalid file name characters
*
* @return the file on disk represented by the file name
*/
public static synchronized
File create(final String cacheName) {
return makeCacheFile(cacheName);
}
// creates the file that will be cached. It may, or may not already exist // creates the file that will be cached. It may, or may not already exist
// must be called from synchronized block! // must be called from synchronized block!
// never retuns null // never returns null
private static private static
File makeCacheFile(final String cachedName) throws IOException { File makeCacheFile(final String cacheName) {
if (cachedName == null) { if (cacheName == null) {
throw new IOException("cachedName is null."); throw new NullPointerException("cacheName");
} }
File saveDir = new File(TEMP_DIR, tempDir); File saveDir = new File(OS.TEMP_DIR, tempDir);
// can be wimpy, only one at a time // can be wimpy, only one at a time
String hash = hashName(cachedName); String hash = hashName(cacheName);
String extension = FileUtil.getExtension(cachedName); String extension = FileUtil.getExtension(cacheName);
if (extension.isEmpty()) { if (extension.isEmpty()) {
extension = "cache"; extension = "cache";
} }
@ -369,8 +388,9 @@ class CacheUtil {
} }
// must be called from synchronized block! // must be called from synchronized block!
// hashed name to prevent invalid file names from being used
private static private static
String hashName(String name) { String hashName(final String name) {
// figure out the fileName // figure out the fileName
byte[] bytes = name.getBytes(OS.UTF_8); byte[] bytes = name.getBytes(OS.UTF_8);
@ -383,7 +403,7 @@ class CacheUtil {
// this is if we DO NOT have a file name. We hash the resourceStream bytes to base the name on that. The extension will be ".cache" // this is if we DO NOT have a file name. We hash the resourceStream bytes to base the name on that. The extension will be ".cache"
public static synchronized public static synchronized
String createNameAsHash(final InputStream resourceStream) { String createNameAsHash(final InputStream resourceStream) throws IOException {
digest.reset(); digest.reset();
try { try {
@ -403,7 +423,7 @@ class CacheUtil {
} catch (IOException e) { } catch (IOException e) {
// Send up exception // Send up exception
String message = "Unable to copy InputStream to memory."; String message = "Unable to copy InputStream to memory.";
throw new RuntimeException(message, e); throw new IOException(message, e);
} finally { } finally {
try { try {
resourceStream.close(); resourceStream.close();

View File

@ -81,8 +81,6 @@ class FileUtil {
} }
public static final String TEMP_DIR = System.getProperty("java.io.tmpdir");
public static byte[] ZIP_HEADER = {'P', 'K', (byte) 0x3, (byte) 0x4}; public static byte[] ZIP_HEADER = {'P', 'K', (byte) 0x3, (byte) 0x4};
/** /**

View File

@ -62,7 +62,7 @@ class ImageUtil {
} }
// now have to resize this file. // now have to resize this file.
File newFile = new File(FileUtil.TEMP_DIR, "temp_resize." + extension).getAbsoluteFile(); File newFile = new File(OS.TEMP_DIR, "temp_resize." + extension).getAbsoluteFile();
Image image; Image image;
// is file sitting on drive // is file sitting on drive
@ -113,7 +113,7 @@ class ImageUtil {
public static public static
File getTransparentImage(final int size, final File fileToUse) throws IOException { File getTransparentImage(final int size, final File fileToUse) throws IOException {
if (fileToUse.canRead() && fileToUse.isFile()) { if (fileToUse.canRead() && fileToUse.isFile()) {
return fileToUse; return fileToUse.getAbsoluteFile();
} }
// make sure the directory exists // make sure the directory exists
@ -121,7 +121,7 @@ class ImageUtil {
final BufferedImage image = getTransparentImageAsBufferedImage(size); final BufferedImage image = getTransparentImageAsBufferedImage(size);
ImageIO.write(image, "png", fileToUse); ImageIO.write(image, "png", fileToUse);
return fileToUse; return fileToUse.getAbsoluteFile();
} }
@SuppressWarnings("WeakerAccess") @SuppressWarnings("WeakerAccess")

View File

@ -15,6 +15,7 @@
*/ */
package dorkbox.util; package dorkbox.util;
import java.io.File;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@ -28,10 +29,13 @@ class OS {
public static final String LINE_SEPARATOR = System.getProperty("line.separator"); public static final String LINE_SEPARATOR = System.getProperty("line.separator");
public static final String LINE_SEPARATOR_UNIX = "\n"; public static final String LINE_SEPARATOR_UNIX = "\n";
public static final String LINE_SEPARATOR_WINDOWS = "\r\n"; public static final String LINE_SEPARATOR_WINDOWS = "\r\n";
public static final Charset US_ASCII = Charset.forName("US-ASCII"); public static final Charset US_ASCII = Charset.forName("US-ASCII");
public static final Charset UTF_8 = Charset.forName("UTF-8"); public static final Charset UTF_8 = Charset.forName("UTF-8");
public static final Charset UTF_16LE = Charset.forName("UTF-16LE"); public static final Charset UTF_16LE = Charset.forName("UTF-16LE");
public static final File TEMP_DIR = new File(System.getProperty("java.io.tmpdir"));
/** /**
* The currently running java version as a NUMBER. For example, "Java version 1.7u45", and converts it into 7 * The currently running java version as a NUMBER. For example, "Java version 1.7u45", and converts it into 7
*/ */
@ -49,6 +53,7 @@ class OS {
* necessary on Windows. * necessary on Windows.
*/ */
Thread timerAccuracyThread = new Thread(new Runnable() { Thread timerAccuracyThread = new Thread(new Runnable() {
@Override
public public
void run() { void run() {
//noinspection InfiniteLoopStatement //noinspection InfiniteLoopStatement