Вот метод, который более дорогой (потому что на самом деле касается диска), но будет кроссплатформенным.
По сути, он создает файл с заданным именем и удаляет его, если он ранее не существовал. Если вы попытались создать файл с недопустимым именем, он выдаст ошибку. Поэтому независимо от того, в какой системе вы находитесь, она сообщит вам, правильно ли указано имя файла.
Теперь он нарушает общее правило (использует исключения для определения потока программы) и имеет недостаток перехода на диск. Но это другой подход, и он может дать вам идеи, которые вы можете использовать.
public boolean isValidFileName(final String fileName) {
final File file = new File(fileName);
final boolean isValid = true;
try {
if (file.createNewFile()) {
file.delete();
}
} catch (IOException e) {
isValid = false;
}
return isValid;
}