Мне нужно сделать так что бы при печати результата программы в методе solve, распечатка шла в gui (swing), а не в консоль, сделать так что бы это все записывалось в строку у меня не получается так как там рекурсия и сделать метод Recursion типа String я не могу. Можно ли как-то изменить поток вывода? Не System.out.println, а так что бы выводилось в gui? Или можно ли как-то то что распечатается в консоли преобразовать в String?(Как-то вытащмть данные из консоли в типе String)?
Метод solve (я попробовал добавить StringBuilder в классе, но при вызове его он пустой, так как считввается в начале работы программы.
import java.io.File;
public class Solution {
static int deepestLevelDigit = 0;
static StringBuilder sb = new StringBuilder();
static public int deepestLevel(File folder) {
int currentLevel;
File[] folderEntries = folder.listFiles();
for (File entry : folderEntries) {
currentLevel = countMatches(entry.getPath());
if (entry.isDirectory()) {
deepestLevel(entry);
}
if (deepestLevelDigit < currentLevel) {
deepestLevelDigit = currentLevel;
}
}
return deepestLevelDigit - 1;
}
private static int countMatches(String path) {
int number = 0;
String[] array = path.split("");
for (int i = 0; i < path.length(); i++) {
if ("\\".contentEquals(array[i])) {
number++;
}
}
return number;
}
static void RecursivePrint(File[] arr, int index, int level, File dir) {
//для возвращения к главной рекурсии
if (index == arr.length)
return;
// для файлов
if (arr[index].isFile() && level == deepestLevel(dir)) {
sb.append((arr[index].getName()));
System.out.println(arr[index].getName());
}
// рекурсия для подпапок (на поиск)
else if (arr[index].isDirectory() && level == deepestLevel(dir)) {
sb.append(arr[index].getName());
System.out.println("[" + arr[index].getName()
+ "]");
}
if (arr[index].isDirectory()) {
// рекурсия для "погружения"
RecursivePrint(arr[index].listFiles(), 0,
level + 1, dir);
}
// для главной папки
RecursivePrint(arr, ++index, level, dir);
}
public static void solve(String mainDirPath) {
File mainDir = new File(mainDirPath);
System.out.println("Максимальная глубина " + deepestLevel(mainDir));
if (mainDir.exists() && mainDir.isDirectory()) {
File[] arr = mainDir.listFiles();
if (arr == null) {
System.out.println(mainDir);
}
RecursivePrint(arr, 0, 0, mainDir);
}
}
}
import javax.swing.*;
public class GuiForm extends JFrame {
private JTextField inputPath;
private JButton Button;
private JTextArea output;
private JPanel panelMain;
public GuiForm() {
this.setTitle("FrameMain");
this.setContentPane(panelMain);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
Button.addActionListener(e -> {
try {
JOptionPane.showMessageDialog(null, "В выводе папки заключены в квадратные скобки [], а файлы просто");
String pathToDir = inputPath.getText();
output.setText(Solution.solve(pathToDir)); <- вот тут мне нужен результат в виде String или что бы сразу печаталось в gui в методе solve так где Sout.
}
catch (Exception err) {
JOptionPane.showMessageDialog(null, "Некорректные данные", "Ошибка", JOptionPane.ERROR_MESSAGE);
}
});
}
}