Моя простая программа выглядит следующим образом:
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
public class ProgressionYAMLUtil {
private final static File PROGRESSFILE_FILE = getProgressionFile();
public static Boolean write(Progression progression)
{
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
try {
objectMapper.writeValue(PROGRESSFILE_FILE, progression);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public static Progression read()
{
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
Progression progression = null;
try {
progression = objectMapper.readValue(PROGRESSFILE_FILE, Progression.class);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return progression;
}
private static File getProgressionFile() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
File file = new File(classLoader.getResource("progress.yaml").getFile());
return file;
}
public static void main(String[] args) {
Progression p1 = new Progression("foo");
p1.newRun(2);
p1.newRun(9);
p1.newRun(11);
System.out.println("WRITE");
System.out.println(p1);
Boolean b = write(p1);
System.out.println("write successfull: " + b);
System.out.println("READ");
Progression p2 = read();
System.out.println(p2);
}
}
По какой-то причине после запуска этого кода мой progress.yaml
файл все еще пуст. Программа работает нормально, и распечатка очень ожидаемая:
WRITE
Progression: foo
0 - 2
1 - 9
2 - 11
write successfull: true
READ
Progression: foo
0 - 2
1 - 9
2 - 11
Если я запускаю основной метод без блока записи, программа все равно успешно читает. Как он может читать контент, которого там нет? Я посмотрел на inte rnet, есть ли какой-нибудь файловый кеш, который я должен очистить, чтобы лучше понять проблему, но я вышел коротко.
Если я изменю оператор writeValue
в методе write
на objectMapper.writeValue(new File("src/main/resources/progress.yaml"), progression);
, то есть при получении файла без classLoader
, программа запишет в файл, и изменения станут видимыми.
Как это случилось? Спасибо за помощь:)