Updated methods to use path insetad of file from java.nio

This commit is contained in:
Isaac Parenteau
2019-07-21 10:52:22 -05:00
parent 4000f46e71
commit 0c3739c8db
8 changed files with 141 additions and 72 deletions

View File

@ -12,6 +12,6 @@ Maven
<dependency> <dependency>
<groupId>net.locusworks</groupId> <groupId>net.locusworks</groupId>
<artifactId>locusworks-commons</artifactId> <artifactId>locusworks-commons</artifactId>
<version>1.1.0-RELEASE</version> <version>${latest_version}</version>
</dependency> </dependency>
``` ```

View File

@ -1,8 +1,9 @@
package net.locusworks.common.configuration; package net.locusworks.common.configuration;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -20,7 +21,7 @@ public class ConfigurationManager {
private Properties configuration; private Properties configuration;
private Properties defaults = null; private Properties defaults = null;
private File conf = null; private Path conf = null;
protected AES aes; protected AES aes;
@ -39,7 +40,7 @@ public class ConfigurationManager {
throw ex; throw ex;
} }
// create patchrepoConf File object // create patchrepoConf File object
conf = new File(String.format("%s/%s", baseDir, propertiesFile)); conf = Paths.get(baseDir).resolve(propertiesFile);
loadConfiguration(); loadConfiguration();
} }
@ -88,7 +89,7 @@ public class ConfigurationManager {
* @throws Exception general exception * @throws Exception general exception
*/ */
public void saveToConf(Properties confs) throws Exception { public void saveToConf(Properties confs) throws Exception {
PropertiesManager.saveConfiguration(confs, conf, conf.getName()); PropertiesManager.saveConfiguration(confs, conf, conf.getFileName().toString());
callbackMessage("Saved config file: " + conf + ", " + confs.size() + " entries"); callbackMessage("Saved config file: " + conf + ", " + confs.size() + " entries");
loadConfiguration(); loadConfiguration();
} }

View File

@ -4,11 +4,12 @@ import static net.locusworks.common.Charsets.UTF_8;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -41,18 +42,32 @@ public class PropertiesManager {
} }
/** /**
* Load configuration from a file * Load configuration from a file. This method has been deprecated and may be removed in
* future released. Please use java.nio.Path
* @param file File to load * @param file File to load
* @return properties * @return properties
* @throws IOException Exception thrown the file can't be read * @throws IOException Exception thrown the file can't be read
*/ */
@Deprecated
public static Properties loadConfiguration(File file) throws IOException { public static Properties loadConfiguration(File file) throws IOException {
if (!file.exists()) { return loadConfiguration(file.toPath());
}
/**
* Load configuration from a file.
* @param path the path to the file
* @return properties
* @throws IOException Exception thrown the file can't be read
*/
public static Properties loadConfiguration(Path path) throws IOException {
if (Files.notExists(path)) {
return new Properties(); return new Properties();
} }
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), UTF_8));
try(BufferedReader br = Files.newBufferedReader(path)) {
return loadConfiguration(br); return loadConfiguration(br);
} }
}
/** /**
* Load configuration from a buffered reader * Load configuration from a buffered reader
@ -110,13 +125,26 @@ public class PropertiesManager {
} }
/** /**
* Save the properties file to disk * <p>Save the properties file to disk.</p>
* <p><b>This method has been depecreated and could be removed in future release.<br/>Please use java.nio.Path</b></p>
* @param props Properties file to save * @param props Properties file to save
* @param fileToSave File to save to * @param fileToSave File to save to
* @param comment Any comments to add * @param comment Any comments to add
*/ */
@Deprecated
public static void saveConfiguration(Properties props, File fileToSave, String comment) { public static void saveConfiguration(Properties props, File fileToSave, String comment) {
try(FileOutputStream fos = new FileOutputStream(fileToSave)) { saveConfiguration(props, fileToSave.toPath(), comment);
}
/**
* <p>Save the properties file to disk.</p>
* @param props Properties file to save
* @param fileToSave File to save to
* @param comment Any comments to add
*/
public static void saveConfiguration(Properties props, Path fileToSave, String comment) {
try(OutputStream fos = Files.newOutputStream(fileToSave)) {
props.store(fos, comment == null ? "" : comment); props.store(fos, comment == null ? "" : comment);
} catch (IOException ex) { } catch (IOException ex) {
throw new RuntimeException(ex.getMessage(), ex); throw new RuntimeException(ex.getMessage(), ex);

View File

@ -19,16 +19,17 @@ package net.locusworks.common.io;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader; import java.io.Reader;
import java.io.StringWriter; import java.io.StringWriter;
import java.io.Writer; import java.io.Writer;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -310,33 +311,44 @@ public class IOUtils {
} }
public static void writeStringToFile(String fileName, String data) throws IOException { public static void writeStringToFile(String fileName, String data) throws IOException {
writeStringToFile(new File(fileName), data, Charsets.UTF_8); writeStringToFile(Paths.get(fileName), data, Charsets.UTF_8);
} }
public static void writeStringToFile(String fileName, String data, Charset charset) throws IOException { public static void writeStringToFile(String fileName, String data, Charset charset) throws IOException {
writeStringToFile(new File(fileName), data, charset); writeStringToFile(Paths.get(fileName), data, charset);
} }
public static void writeStringToFile(File file, String data) throws IOException { public static void writeStringToFile(Path file, String data) throws IOException {
writeStringToFile(file, data, Charsets.UTF_8); writeStringToFile(file, data, Charsets.UTF_8);
} }
@Deprecated
public static void writeStringToFile(File file, String data, Charset charset) throws IOException { public static void writeStringToFile(File file, String data, Charset charset) throws IOException {
try(Writer writer = new OutputStreamWriter(new FileOutputStream(file), charset)) { writeStringToFile(file.toPath(), data, charset);
}
public static void writeStringToFile(Path file, String data, Charset charset) throws IOException {
try(Writer writer = Files.newBufferedWriter(file, charset)) {
writer.write(data); writer.write(data);
writer.flush(); writer.flush();
} }
} }
public static void deleteFile(String fileName) { public static void deleteFile(String fileName) {
deleteFile(new File(fileName)); deleteFile(Paths.get(fileName));
} }
@Deprecated
public static void deleteFile(File file) { public static void deleteFile(File file) {
if (file.exists()) { deleteFile(file.toPath());
file.delete(); }
file.deleteOnExit();
public static void deleteFile(Path file) {
try {
Files.deleteIfExists(file);
} catch (IOException ex) {
throw new IllegalArgumentException(ex);
} }
} }

View File

@ -4,9 +4,12 @@ import static net.locusworks.common.Charsets.UTF_8;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Iterator; import java.util.Iterator;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
@ -36,7 +39,16 @@ public class FileReader implements AutoCloseableIterator<FileReader.LineInfo>, I
* Constructor * Constructor
* @param file File to read * @param file File to read
*/ */
@Deprecated
public FileReader(File file) { public FileReader(File file) {
init(file.toPath());
}
/**
* Constructor
* @param file File to read
*/
public FileReader(Path file) {
init(file); init(file);
} }
@ -56,8 +68,8 @@ public class FileReader implements AutoCloseableIterator<FileReader.LineInfo>, I
*/ */
private void init(String fileName) { private void init(String fileName) {
//check to see if the file exists //check to see if the file exists
File f = new File(fileName); Path f = Paths.get(fileName);
if (f.exists()) { if (Files.exists(f)) {
init(f); //If it does. load through the file initializer init(f); //If it does. load through the file initializer
return; return;
} }
@ -73,19 +85,23 @@ public class FileReader implements AutoCloseableIterator<FileReader.LineInfo>, I
} }
//Call the buffered reader initializer once the file is found //Call the buffered reader initializer once the file is found
init(new BufferedReader(new InputStreamReader(is, UTF_8))); try(BufferedReader br = new BufferedReader(new InputStreamReader(is, UTF_8))) {
init(br);
} catch (IOException e) {
throw new IllegalArgumentException(e);
}
} }
/** /**
* Initializer helper to load file * Initializer helper to load file
* @param file File to load * @param file File to load
*/ */
private void init(File file) { private void init(Path file) {
if (file == null) throw new IllegalArgumentException("File cannot be null"); if (file == null) throw new IllegalArgumentException("File cannot be null");
if (!file.exists()) throw new IllegalArgumentException("File " + file + " does not exist"); if (Files.notExists(file)) throw new IllegalArgumentException("File " + file + " does not exist");
if (!file.isFile()) throw new IllegalArgumentException("File " + file + " is not a file"); if (!Files.isRegularFile(file)) throw new IllegalArgumentException("File " + file + " is not a file");
try { try (BufferedReader br = Files.newBufferedReader(file)) {
init(new BufferedReader(new InputStreamReader(new FileInputStream(file), UTF_8))); init(br);
} catch (Exception ex) { } catch (Exception ex) {
throw new RuntimeException(ex); throw new RuntimeException(ex);
} }

View File

@ -3,11 +3,12 @@ package net.locusworks.common.utils;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.MessageDigest; import java.security.MessageDigest;
/** /**
@ -56,16 +57,26 @@ public class HashUtils {
return hash(hashType, stringData, toLower); return hash(hashType, stringData, toLower);
} }
@Deprecated
public static String hash(String hashType, File data) {
return hash(hashType, data.toPath());
}
/** /**
* Hash a file * Hash a file
* @param hashType Hash types supported by MessageDigest (i.e MD5, SHA-1, SHA-512) * @param hashType Hash types supported by MessageDigest (i.e MD5, SHA-1, SHA-512)
* @param data File to hash * @param data File to hash
* @return hash value of the file * @return hash value of the file
*/ */
public static String hash(String hashType, File data) { public static String hash(String hashType, Path data) {
return hash(hashType, data, true); return hash(hashType, data, true);
} }
@Deprecated
public static String hash(String hashType, File data, boolean toLower) {
return hash(hashType, data.toPath(), toLower);
}
/** /**
* Hash a file * Hash a file
* @param hashType Hash types supported by MessageDigest (i.e MD5, SHA-1, SHA-512) * @param hashType Hash types supported by MessageDigest (i.e MD5, SHA-1, SHA-512)
@ -73,14 +84,12 @@ public class HashUtils {
* @param toLower True to output the hash in lower case. False to output in upper case * @param toLower True to output the hash in lower case. False to output in upper case
* @return hash value of the file * @return hash value of the file
*/ */
public static String hash(String hashType, File data, boolean toLower) { public static String hash(String hashType, Path data, boolean toLower) {
InputStream stream; try (InputStream stream = Files.newInputStream(data)) {
try { return hash(stream, hashType, toLower);
stream = new FileInputStream(data);
} catch (IOException ex) { } catch (IOException ex) {
throw new IllegalArgumentException(ex.getMessage()); throw new IllegalArgumentException(ex.getMessage());
} }
return hash(stream, hashType, toLower);
} }
/** /**

View File

@ -4,6 +4,7 @@ import static org.junit.Assert.*;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.nio.file.Paths;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
@ -48,7 +49,7 @@ public class FileReaderTest {
@Test @Test
public void testForLoop() { public void testForLoop() {
Integer lineCount = 0; Integer lineCount = 0;
for(LineInfo s : new FileReader(new File(TEST_FILE))) { for(LineInfo s : new FileReader(Paths.get(TEST_FILE))) {
lineCount++; lineCount++;
Integer lineNumber = s.getLineNumber(); Integer lineNumber = s.getLineNumber();
Integer lineLength = s.getLine().length(); Integer lineLength = s.getLine().length();
@ -62,7 +63,7 @@ public class FileReaderTest {
public void testIterator() { public void testIterator() {
Integer lineCount = 0; Integer lineCount = 0;
try(AutoCloseableIterator<LineInfo> iter = new FileReader(new File(TEST_FILE))) { try(AutoCloseableIterator<LineInfo> iter = new FileReader(Paths.get(TEST_FILE))) {
while(iter.hasNext()) { while(iter.hasNext()) {
lineCount++; lineCount++;
LineInfo s = iter.next(); LineInfo s = iter.next();
@ -78,7 +79,7 @@ public class FileReaderTest {
@Test @Test
public void testForIterator() { public void testForIterator() {
Integer lineCount = 0; Integer lineCount = 0;
for(Iterator<LineInfo> iter = new FileReader(new File(TEST_FILE)); iter.hasNext();) { for(Iterator<LineInfo> iter = new FileReader(Paths.get(TEST_FILE)); iter.hasNext();) {
lineCount++; lineCount++;
LineInfo s = iter.next(); LineInfo s = iter.next();
Integer lineNumber = s.getLineNumber(); Integer lineNumber = s.getLineNumber();

View File

@ -4,6 +4,8 @@ import static org.junit.Assert.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties; import java.util.Properties;
import org.junit.AfterClass; import org.junit.AfterClass;
@ -107,7 +109,7 @@ public class PropertiesManagerTest {
public void testSaveConfiguration() { public void testSaveConfiguration() {
try { try {
Properties props = PropertiesManager.loadConfiguration(this.getClass(), PROPERTIES_FILE); Properties props = PropertiesManager.loadConfiguration(this.getClass(), PROPERTIES_FILE);
File tmpFile = new File(TMP_PROPS); Path tmpFile = Paths.get(TMP_PROPS);
PropertiesManager.saveConfiguration(props, tmpFile, "test propertis"); PropertiesManager.saveConfiguration(props, tmpFile, "test propertis");
Properties tmp = PropertiesManager.loadConfiguration(tmpFile); Properties tmp = PropertiesManager.loadConfiguration(tmpFile);
assertTrue(tmp.keySet().size() == ENTRY_SIZE); assertTrue(tmp.keySet().size() == ENTRY_SIZE);