Я пытаюсь, чтобы java анализировал строки файла XML, и когда он находит строку, содержащую определенное слово, извлекает значение из этого элемента. Это все делается через манипуляции со строками. Локально я проверил, что это работает с использованием копии того же файла, который он будет смотреть на сервере, в конечном итоге.
Однако по какой-то причине при запуске через удаленный сервер он не работает, как предполагалось,В результате отображаются только пустые строки, в которых раньше отображался текст в элементах. Сервер, на котором это выполняется, также активно читает из этого файла, но он должен быть только один раз во время выполнения для другого процесса. Кроме того, он по-прежнему печатает правильное количество строк, чтобы показать, что видит правильные значения, как и раньше, и может правильно распечатать эти строки в файле журнала, если это происходит в полном объеме.
Это функция, которая обрабатывает анализ файла:
private HashSet<String> parseFile() throws ProcessingException{
String fileLocation = getInterfaceLocation();
HashSet<String> fileMasks = new HashSet<String>();
try {
File file = new File(fileLocation);
BufferedReader br = new BufferedReader(new FileReader(file));
boolean inFileSet = false;
String line = "";
while((line = br.readLine()) != null) {
if(line.toLowerCase().contains("<fileset")) {
inFileSet = true;
continue;
}
if(line.toLowerCase().contains("</fileset>")) {
inFileSet = false;
}
if(inFileSet) {
log(line);
if(!line.toLowerCase().contains("<include")) {
continue;
}
else {
line = line.substring(line.indexOf("name=") + "name=".length() + 1);
line = line.substring(0, line.indexOf("\""));
log("Adding mask = ", line);
fileMasks.add(line);
}
}
}
br.close();
} catch(IOException e) {
throw new ProcessingException("Unable to open the TESTFILE.xml file",e);
}
return fileMasks;
}
А вот соответствующая часть файла XML, которую он анализирует:
<fileset>
<include name="filetype1*.csv"/>
<include name="filetype2*.csv"/>
<include name="filetype3*.csv"/>
<include name="filetype4*.csv"/>
<include name="filetype5*.csv"/>
<include name="filetype6*.csv"/>
<include name="filetype7*.csv"/>
<include name="filetype8*.csv"/>
<include name="filetype9*.csv"/>
<include name="filetype10*.csv"/>
<include name="filetype11*.csv"/>
<include name="filetype12*.csv"/>
<include name="filetype13*.csv"/>
<include name="filetype14*.csv"/>
</fileset>
В моей тестовой среде (Windows 10) я вижу следующий вывод:
<include name="filetype1*.csv"/>
Adding mask = filetype1*.csv
<include name="filetype2*.csv"/>
Adding mask = filetype2*.csv
<include name="filetype3*.csv"/>
...
<include name="filetype14*.csv"/>
Adding mask = filetype14*.csv
И в среде удаленного сервера я получаю:
<include name="filetype1*.csv"/>
Adding mask =
<include name="filetype2*.csv"/>
Adding mask =
<include name="filetype3*.csv"/>
...
<include name="filetype14*.csv"/>
Adding mask =