Я думаю, что ключ находится в сообщении об исключении:
Illegal char <:> at index 2: [E:\Temp\564\324\123.txt]
Обратите внимание, что это говорит о том, что недопустимый символ находится в индексе 2.
Теперь Java использует индексирование на основе нуля для строк и массивов и большинства других вещей 1 . Таким образом, если символ :
имеет смещение 2
, тогда символ [
должен быть первым символом пути; то есть фактическое «имя пути» формируется из "[E:\Temp\564\324\123.txt]"
, включая квадратные скобки.
Это неправильно.
Так откуда это?
temp.add(Paths.get(Arrays.toString(searchFile(s, fileName))));
Что?
Вы вызываете Arrays.toString
для некоторого массива и ожидаете, что это будет допустимое имя пути. Ни за что это не сработает. Прочитайте javadocs для Arrays.toString()
.
Для справки, вот краткий способ объединить массив строк в Path
.
String[] array = {"a", "b", "c"};
Path p = Stream.of(array).map(Paths::get).reduce(Path::resolve).get();
System.out.println(p);
1 - Включает смещение в этом сообщении об исключении. Я проверил исходный код.