DataStructure из файла xlsx

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

Я использую Apache POI для чтения файла excel.

Как я могу хранить их в массиве, учитывая, что у меня 8 уровней дерева?

Например :

Folder Subfolder01 Subfolder02 Subfolder02.01 Subfolder02.01.01 Subfolder02.01.01.01 Subfolder02.01.02 Subfolder03 Subfolder04 Subfolder04.01 Subfolder04.01.01 Subfolder04.01.01.01 Subfolder04.01.02 Subfolder04.01.02.01 Subfolder04.02 

Вот как я прочитал файл excel с помощью Apache POI libs:

 public class ExcelReadClass { private static final String FILE_NAME = "D:/Work-Space/TESTExcel.xlsx"; public void readExcel(String fileName) { try { // XSSFWorkbook = XML SpreadSheet Format // is for Excel 2007 or above Workbook workbook = new XSSFWorkbook(fileName); // Accessing the particular sheet // here the parameter indicates the sheet number. 0 means first sheet, 1 means the second and so on /// accessing first sheet - which is " Components " Sheet sheet = workbook.getSheetAt(0); /* * Sheet can also be accessed using the sheet name like shown below * Sheet sheet = workbook.getSheet("Components"); */ // geting the rows // following code will work with empty cells Row row = null; Cell cell = null; // Returns: the number of physically defined rows in the selected sheet //int noOfRows = sheet.getPhysicalNumberOfRows(); //Returns: last row contained n this sheet (0-based) int noOfRows = sheet.getLastRowNum(); // starting from 0 - which is the first row for(int i = 2; i <= noOfRows; i++) { row = sheet.getRow(i); //int noOfCells = row.getPhysicalNumberOfCells(); // returns the total number of cells in the selected row //int noOfCells = row.getLastCellNum(); // returns the number of the last cell in the row int noOfCells = 11; 

Здесь я выводя структуру файла с помощью Sysout . Место, где я должен хранить всю структуру в массив

  // starting from 0 - which is the first column ( aka cell ) for(int j = 1; j < noOfCells; j++) { cell = row.getCell(j) ; // if there's no more cells, it returns null if(cell != null ) { System.out.print(getCellValue(cell) + "\t"); } else { Cell blanckCell = row.createCell(j); blanckCell.setCellValue(""); System.out.print(getCellValue(blanckCell) + "\t"); } } System.out.println(); } workbook.close(); } catch (FileNotFoundException e) { System.out.println("File is not available."); e.printStackTrace(); } catch (IOException e) { System.out.println("Problem reading file from directory."); e.printStackTrace(); } catch (NullPointerException e){ System.err.println("Last part of Excel"); e.printStackTrace(); } } public Object getCellValue(Cell cell){ Object cellValue = null; if(cell.getCellTypeEnum() == CellType.STRING){ cellValue = cell.getStringCellValue(); }else if(cell.getCellTypeEnum() == CellType.NUMERIC){ cellValue = cell.getNumericCellValue(); }else if(cell.getCellTypeEnum() == CellType.BOOLEAN){ cellValue = cell.getBooleanCellValue(); }else if(cell.getCellTypeEnum() == CellType.BLANK){ cellValue = ""; } return cellValue; } } 

Вот фрагмент кода, который поможет вам начать

 try { final String FILENAME = "c:\\Rest\\Test\\data.txt"; //change to your file location BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(FILENAME), "UTF-8")); //change it to your reader String line; //read file line by line while ((line = br.readLine()) != null) { System.out.println(line); Node root = null; if (line == "Folder") { root = new Node(null); } else { String indexs = line.substring(9, line.length()); if (indexs.length() == 2) { // insert to root } else if (indexs.length() == 4) { // create node and use readLine to all sub nodes } } } br.close(); } catch (IOException e) { e.printStackTrace(); } 

И класс Node :

 import java.util.ArrayList; import java.util.List; public class Node { private String id; private final List<Node> children = new ArrayList<>(); private final Node parent; public Node(Node parent) { this.parent = parent; } public String getId() { return id; } public void setId(String id) { this.id = id; } public List<Node> getChildren() { return children; } public Node getParent() { return parent; } } 

В Java вы можете использовать структуру данных HashMap или TreeMap в сочетании с ArrayList и моделировать свои требования следующим образом.

 Map<String, Map<String, List<String>>>map = new HashMap<String, Map<String, List<String>>>(); 

Затем, пока вы читаете имена папок, вы можете добавить их в структуру данных, которую я предложил. Хешмап – это ваша папка. Ключи первого уровня карты хэш-карты будут содержать «Подпапка01, Подпапка02, Подпапка03, Подпапка04». Соответствующими значениями будут папки, содержащиеся в уже упомянутых папках. Каждое из этих значений будет представлять собой Map<String, List<String>>mi которая, в свою очередь, будет содержать имя подпапок «Subfolder02.01 …» и т. Д. Для каждого уровня. Когда вы достигнете последнего уровня и найдите файлы, содержащиеся в последней папке, вы можете вставить эти имена в ArrayList. Вы можете расширить или ограничить уровни вашей структуры данных настолько, насколько это необходимо, в соответствии с уровнями, которые у вас есть.

  • Не удалось удалить файл Excel с пустыми строками с помощью Apache POI
  • Excel загружен с помощью Apache poi
  • Apache POI: определение исходных таблиц на листе excel
  • Apache POI - как он может установить файл для установки «поместить все столбцы на одну страницу» в Excel
  • Чтение данных из файла excel
  • Увеличение памяти, чтобы избежать ошибки OutOfMemory
  • Почему это происходит при написании Excel в Java
  • Прочитайте цвет из пустой ячейки в Excel на Java с помощью Apache POI
  • Использование функции Excel PERCENTILE в Apache POI
  • Библиотека FILLO для чтения данных из Excel (не удалось настроить)
  • Ошибка XLSX в CSV из памяти
  • Interesting Posts

    Преобразование, требуемое от общего в текстовый формат в vba

    Импортировать несколько листов excel в gridview с помощью exceldatareader

    Значения суммы в одном столбце на основе нескольких условий в одной ячейке

    Как сделать ленту с разными кнопками, включенными в разные книги?

    Извлечение изображений из документа Excel

    Как вы можете программно определить область для определенного имени с помощью SpreadsheetGear?

    KeyError при фильтрации данных excel с помощью pandas

    Зацикливание по листам и попытка подсчета данных в столбцах

    Более быстрый способ вставки строк в электронную таблицу Excel на C # с помощью oleDbCommand?

    В Excel, как мне извлечь последние четыре буквы из десяти буквенных строк?

    Можно ли использовать условное форматирование для форматирования нескольких столбцов на основе формулы

    Добавление гиперссылок в текст основного текста электронной почты

    Timeline Slicer Excel 2013 VBA

    Excel VBA процесс csv строка в массив

    Excel # ВАЛЮТА! ошибка при использовании GetValue

    Давайте будем гением компьютера.