String.split()
запрашивает регулярное выражение в своем параметре, а в регулярных выражениях .
будет соответствовать любому символу. Чтобы это работало, вам нужно добавить \
, например:
System.out.println(file.getName().split("\\.").length);
Вам нужен один обратный слеш, чтобы убежать от точки, поэтому регулярное выражение знает, что вам нужна настоящая точка. Вам нужна другая обратная косая черта, чтобы избежать первой обратной косой черты, то есть, чтобы сообщить Java, что вы хотите иметь фактическую обратную косую черту внутри вашей строки.
Прочтите javadoc для String.split и регулярных выражений для получения дополнительной информации.