bcv-vf/src/main/java/me/konloch/kontainer/io/DiskReader.java

107 lines
3.0 KiB
Java
Raw Normal View History

package me.konloch.kontainer.io;
import java.io.BufferedReader;
import java.io.File;
2021-04-12 20:19:12 +00:00
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
2021-04-12 20:19:12 +00:00
import the.bytecode.club.bytecodeviewer.util.EncodeUtils;
/**
* Used to load from the disk, optional caching
2018-01-31 15:41:24 +00:00
*
* @author Konloch
*/
public class DiskReader {
2018-01-31 15:41:24 +00:00
public static Random random = new Random();
public static Map<String, List<String>> map = new HashMap<>();
2018-01-31 15:41:24 +00:00
/**
* Used to load from file, allows caching
*/
public synchronized static List<String> loadArrayList(String fileName,
boolean cache) {
List<String> array = new ArrayList<>();
2018-01-31 15:41:24 +00:00
if (!map.containsKey(fileName)) {
try {
File file = new File(fileName);
2021-07-25 16:54:08 +00:00
if (!file.exists()) // doesn't exist, return empty
2018-01-31 15:41:24 +00:00
return array;
2021-07-25 16:54:08 +00:00
try (FileReader fr = new FileReader(file);
BufferedReader reader = new BufferedReader(fr)) {
String add;
2018-01-31 15:41:24 +00:00
2021-07-25 16:54:08 +00:00
while ((add = reader.readLine()) != null)
array.add(add);
2018-01-31 15:41:24 +00:00
2021-07-25 16:54:08 +00:00
}
2018-01-31 15:41:24 +00:00
if (cache)
map.put(fileName, array);
} catch (Exception e) {
e.printStackTrace();
}
} else {
array = map.get(fileName);
}
return array;
}
/**
* Used to load from file
*/
public synchronized static String loadAsString(String fileName) throws Exception {
StringBuilder s = new StringBuilder();
2018-01-31 15:41:24 +00:00
2021-07-25 16:54:08 +00:00
try (FileReader fr = new FileReader(fileName);
BufferedReader reader = new BufferedReader(fr)) {
for (String add = reader.readLine(); add != null; add = reader.readLine()) {
2022-02-25 14:52:53 +00:00
s.append(EncodeUtils.unicodeToString(add)).append(System.lineSeparator());
2021-07-25 16:54:08 +00:00
}
}
2018-01-31 15:41:24 +00:00
return s.toString();
2018-01-31 15:41:24 +00:00
}
/**
* Used to load a string via line number lineNumber = -1 means random.
*/
public static String loadString(String fileName, int lineNumber,
boolean cache) throws Exception {
List<String> array;
2018-01-31 15:41:24 +00:00
if (!map.containsKey(fileName)) {
2021-04-12 22:31:22 +00:00
array = new ArrayList<>();
2018-01-31 15:41:24 +00:00
File file = new File(fileName);
2021-07-25 16:54:08 +00:00
try (FileReader fr = new FileReader(file);
BufferedReader reader = new BufferedReader(fr)) {
String add;
2018-01-31 15:41:24 +00:00
2021-07-25 16:54:08 +00:00
while ((add = reader.readLine()) != null)
array.add(add);
}
2018-01-31 15:41:24 +00:00
if (cache)
map.put(fileName, array);
} else {
array = map.get(fileName);
}
if (lineNumber == -1) {
int size = array.size();
return array.get(random.nextInt(size));
} else
return array.get(lineNumber);
}
}