Я написал немного кода, который проверяет содержимое файла с разделителями-запятыми, проверяя каждое поле на некоторое регулярное выражение - конкретное регулярное выражение, которое вызывает у меня горе, является очень простым регулярным выражением даты (\\d{2}/\\d{2}/\\d{2}
) , Если данные в этой области не соответствует, он должен выписать в отдельный файл, указывающий, что он должен быть проверен, например, так:Различия в несоответствиях Java jar между машинами
private static int DATE_FIELD = 5;
File input = new File("input.txt");
Pattern p = Pattern.compile("\\d{2}/\\d{2}/\\d{2}");
BufferedReader reader = new BufferedReader(new FileReader(input));
String line = reader.readLine();
while(line != null){
String[] splitLine = line.split(",");
Matcher m = p.matcher(splitLine[DATE_FIELD]);
if(!m.matches) {
// write warning to separate file
}
line = reader.readLine();
}
Этот код компилируется как часть большего файла JAR, который установлен на 4 компьютерах в офисе (шахта и три других). Файл jar вызывается через вызов оболочки, сделанный отдельной программой, передавая соответствующие параметры. Это часть проверки контроля качества, прежде чем мы импортируем данные в нашу базу данных, а дата - обязательное поле, поэтому, если поле даты оставлено пустым, оно должно быть помечено для проверки.
Регулярное выражение, которое я использовал, не должно пропускать пустую дату, и когда я запускаю его на своей машине, он правильно обозначает отсутствующие даты. Однако на машинах моих коллег пустые даты были как-то не отмечены, как будто это поле вообще не проверялось, что вызвало небольшое горе, когда файл был импортирован в базу данных.
Другими словами, между нашими машинами существует некоторое расхождение, которое вызвало неправильное выполнение кода на своих машинах, но не мое. На всех машинах есть Java 8 (не совсем точно, какая версия, но все они должны быть одинаковой версии). Как это может быть?
Я предполагаю, что вы не читаете файл, который вы что вы читаете, или что вы неправильно пишете предупреждения, или что вы не пишете их в файл, который вы думаете. Добавьте логические инструкции, показывая абсолютные пути файлов, значения проверяемых строк и т. Д. –
Это поможет, если вы включили код для метода splitLine. Кроме того, будет полезно использовать некоторые примеры ввода. Кроме того, все ваши сотрудники используют ту же ОС, которую вы используете? Это важнее, чем версия Java, так как «FileReader» использует кодировку по умолчанию для системы. – VGR
@VGR 'splitLine' является результатом' java.String.split() '. Однако я думаю, что GKR помог мне прибить основную причину. – NAMS