Обратите внимание, что рекурсивный вызов browseFolder
не изменит свой параметр, поскольку String
является неизменным. Строковая переменная, которая передается методу, всегда остается неизменной после возврата этого метода. Это означает, что пока каталог blablalbla/.../toto
заполнен подкаталогами, ваш основной вызов browseFolder
будет возвращать пустую строку, потому что вы ничего не делаете для result
.
You может добавить возвращаемое значение рекурсивных browseFolder
вызовов к result
, например:
private static String browseFolder(String result, File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
// here:
result += browseFolder(result, fileEntry);
}
else {
System.out.println(fileEntry.getPath());
result += fileEntry.getPath() + "\n";
}
}
return result;
}
Однако, это создает новую строку каждый раз, когда вы делаете это, так что это довольно расточительно. Вместо этого вы можете использовать StringBuilder
(который может изменяться!).
private static StringBuilder browseFolder(StringBuilder result, File folder) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
browseFolder(result, fileEntry);
}
else {
System.out.println(fileEntry.getPath());
result.append(fileEntry.getPath()).append("\n");
}
}
return result;
}
Вызывающий абонент также должен будет измениться. Вы можете сделать .toString
на StringBuilder
, чтобы преобразовать его в String
.
String files = browseFolder(new StringBuilder(), new File("blablalbla/.../toto")).toString();