Экспортировать каталоги перекурсивного списка

Я делаю перекурсивную поездку каталогов и хочу экспортировать каталоги и файлы, подуманные в файл excel. Это мой код

package packages;

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class hh {

    public void leer(String inicio, String altura) {
        File ar = new File(inicio);
        String[] dir = ar.list();
        XSSFWorkbook book = new XSSFWorkbook();
        XSSFSheet sheet = book.createSheet();
        for (int f = 0; f < dir.length; f++) {
            File ar2 = new File(inicio + dir[f]);
            String sss = "Directorio: " + dir[f];
            XSSFRow row = sheet.createRow(f);

            if (ar2.isFile()) {
                //System.out.println(altura + dir[f]);
            }
            if (ar2.isDirectory()) {
                System.out.println(altura + "Directorio:" + dir[f]);
                for (int j = 0; j < dir.length; j++) {
                    XSSFCell cell = row.createCell(j);
                    cell.setCellValue(sss);
                }
                leer(inicio + dir[f] + "\\", altura + "  ");
            }

        }
        try {
            FileOutputStream out = new FileOutputStream(new File("C:\\Users\\Desktop\\jdjdj.xlsx"));
            book.write(out);
            System.out.println("Excel written successfully..");
        } catch (Exception e) {
        }
    }

    public static void main(String[] arguments) {
        hh rec = new hh();
        rec.leer("C:\\Users\\Desktop\\internacionales\\", "");
    }
}

Когда производится файл .xlsx одинокий, он показывает мне главные папки, а именно, первые папки, которые он находит в маршруте, который он определяет. Я хочу напечатать все подпапки в файле excel

0
задан 08.04.2016, 23:44
2 ответа

LibrerГ - Апачи Commons IO имеет по отношению к класс FileUtils , который предлагает тебе большое количество mГ©todos утилиты, чтобы работать с файлами и каталогами, в твоем конкретном случае mГ©todo public static Кольектион < File> listFilesAndDirs (File directory, IOFileFilter fileFilter, IOFileFilter dirFilter) предлагает тебе то, что ты ищешь, cГіdigo serГ - в:

Collection<File> directorios=FileUtils.listFilesAndDirs(new File(inicio), DirectoryFileFilter.DIRECTORY,TrueFileFilter.TRUE);

AquГ - у тебя есть одна colecciГіn Полей, которые являются всеми расположенными напротив каталогами перекурсивной формы.

1
ответ дан 24.11.2019, 14:37

Проблема состоит в том, что ты звонишь в метод перекурсивного способа и в каждом вызове ты пишешь книгу в физическом выводе, обозначенный в этих частях:

public void leer(String inicio, String altura) {
    //...
    XSSFWorkbook book = new XSSFWorkbook(); //<- creas el archivo Excel en memoria, local al método
    //..
    for (int f = 0; f < dir.length; f++) {
        //...
        if (ar2.isDirectory()) {
            //...
            leer(inicio + dir[f] + "\\", altura + "  "); //<- llamada recursiva al método
        }
    }
    try {
        //...
        book.write(out); //<- escribes el libro Excel local al método en disco
        //...
    } //...
}

Лучшее, что ты можешь делать, состоит в том, чтобы двигать создание и оформляет нотариальным актом книги Excel вне метода, перемещать переменную, которая манипулирует книгой такой Excel как параметр в метод, и писать файл, после выполняя метод, таким образом:

public class hh {

    public void leer(String inicio, String altura, XSSFWorkbook book) {
        File ar = new File(inicio);
        String[] dir = ar.list();
        for (int f = 0; f < dir.length; f++) {
            File ar2 = new File(inicio + dir[f]);
            String sss = "Directorio: " + dir[f];
            XSSFSheet sheet = book.getSheetAt(0);
            XSSFRow row = sheet.createRow(sheet.getLastRowNum() + 1);
            if (ar2.isFile()) {
                //System.out.println(altura + dir[f]);
            }
            if (ar2.isDirectory()) {
                System.out.println(altura + "Directorio:" + dir[f]);
                for (int j = 0; j < dir.length; j++) {
                    XSSFCell cell = row.createCell(j);
                    cell.setCellValue(sss);
                }
                leer(inicio + dir[f] + "\\", altura + "  ");
            }
        }
    }

    public static void main(String[] arguments) {
        hh rec = new hh();
        XSSFWorkbook book = new XSSFWorkbook();
        XSSFSheet sheet = book.createSheet();
        rec.leer("C:\\Users\\Desktop\\internacionales\\", "", book);
        try {
            FileOutputStream out = new FileOutputStream(new File("C:\\Users\\Desktop\\jdjdj.xlsx"));
            book.write(out);
            System.out.println("Excel written successfully..");
            book.close();
        } catch (Exception e) {
        }
    }
}
0
ответ дан 24.11.2019, 14:37
  • 1
    Привет Luiggi. Есть ошибка с в линии leer(inicio + dir[f] + "\\", altura + " "); нет пары и # 225; метр. Если я даю ему как третья пара и # 225; метр " book" продолжи печатать первые папки, которые он находит. – S.Bruce 09.04.2016, 19:08