Мне интересно, почему возникает проблема с заменой Arraylist из File на массив.
public static void main(String[] args) {
List<File> pl = new ArrayList<File>();
pl.add(new File ("C:\\folder"));
String[] k;
k = pl.toArray(new String[pl.size()]);
System.out.println(k);
}
В простом примере выше я получу:
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(Unknown Source)
at Main.main(Main.java:25)
и второй вопрос: должен ли я передавать размер Arraylist? Поскольку обе версии отлично работают с массивом строк:
k = pl.toArray(new String[pl.size()]);
k = pl.toArray(new String[] {});




У вас есть список объектов File, вы не можете просто поместить их в массив String, вам нужно как-то явно их преобразовать (например, путем вызова File#getName()). Самый удобный способ сделать это, вероятно, с Stream:
k = p1.stream().map(File::getName).toArray(String[]::new);
Вам не нужно преобразовывать Path в String, если вы хотите отобразить List<Path> в массив.
Вот что можно было написать (добавлю комментарий по поводу изменений):
public static void main(String[] args) {
List<File> pl = new ArrayList<>(); // Diamond operator
pl.add(new File ("C:\\folder"));
File[] k = pl.toArray(new File[pl.size()]);
k = pl.stream().toArray(File[]::new); // equivalent to the previous line
System.out.println(Arrays.toString(k)); // Array.toString is not overriden. So this is needed
}
Что ты здесь делаешь? Вы пытаетесь преобразовать список файлов в список строкового содержимого?