Это очень запутанная проблема.
У нас есть Java-приложение (Java8, работающее на JBoss 6.4), которое зацикливает определенное количество объектов и записывает несколько строк в файл в каждом раунде.
В каждом раунде, который мы проверяем, принимаем ли мы объект File в качестве параметра, а если нет, мы создаем новый объект и создаем физический файл:
if (file == null){
File file = new File(filename);
try{
file.createNewFile();
} catch (IOException e) {e.printStackTrace();}}
Таким образом, идея заключается в том, что файл get создается только один раз, и после этого шаг пропускается, и мы приступаем прямо к записи. Переменная filename не является путем, это просто имя файла без пути, поэтому файл создается по пути jboss_root / tmp / hsperfdata_ username /
edit1. Я добавлю сюда также методы, используемые при написании, если они окажутся актуальными:
fw = new FileWriter(indeksiFile, true); // append = true
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
.
.
out.println(..)
.
.
out.flush();
out.close(); // this flushes as well -> line above is useless
Так что теперь проблема в том, что иногда, очень редко, физический файл исчезает с пути в середине процесса. Ссылка на java-объект никогда не теряется, но кажется, что сам объект исчезает, потому что код автоматически создает файл снова по тому же пути и продолжает записывать вещи в него. Этого не произойдет, если файл условия == null не будет иметь значение true. В результате очевидно, что мы теряем строки, которые были записаны в предыдущий файл. Приложение Java не замечает никаких ошибок и продолжает работать.
Итак, у меня было бы три вопроса, которые тесно связаны между собой, и я не смог найти ответ от Google.
- Если мы вызываем метод File.CreateNewFile (), является ли полученный файл постоянным файлом в файловой системе или каким-либо JVM-прокси-файлом?
- Если это постоянный файл, знаете ли вы, почему он исчезает? Поведение по умолчанию в нашем случае таково, что в какой-то момент файл всегда удаляется из пути. Я предполагаю, что тот же механизм удаляет файл слишком рано. Я просто не знаю, как управлять этим механизмом.
- Мое лучшее предположение состоит в том, что это связано с этим путем jboss_root / tmp / hsperfdata_ username /, который является некоторой папкой временных данных, созданной JVM, и, вероятно, существует некоторое поведение по умолчанию, которое очищает путь. Я даже близко?
Помощь приветствуется! Спасибо!