Как установить файл свойств с некоторой пользовательской конфигурацией - PullRequest
1 голос
/ 23 мая 2019

У меня есть код для чтения значений из файла Excel с использованием Apache POI, содержимое этого файла Excel представляет собой большую таблицу с несколькими столбцами и множеством строк, и есть много файлов Excel с одинаковой структурой (количество столбцов)и иногда могут иметь разные имена столбцов и разные значения столбцов.

Одно из моих требований - объединить все данные в два разных типа данных, один из них - числовые данные типа Float, а другой - текстовое значение в виде строки.

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

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

В настоящее время я пришел с нижеприведенной логикой, чтобы исправить положение столбца с его типом данных String или Float, и это хорошо для одного конкретного файла Excel.

     String filePath;
     String fileProcessingType;

     Map<Integer, List<MergeCellRange>> mergeCellMap = new HashMap<>();
     Map<Integer, String> columnHeaderMap = new HashMap<>(););

     static NavigableMap<Integer, String> columnTypeMap = null; // map is used to identify the column
     // types of each parameter
    static {
      columnTypeMap = new TreeMap<Integer, String>();
      columnTypeMap.put(0, "String");
      columnTypeMap.put(1, "String"); // 1 TimeStamp as String
      columnTypeMap.put(2, "String"); // 2-66 String
      columnTypeMap.put(66, "String"); // 66 String
      columnTypeMap.put(67, "Float"); // 67-88 String
      columnTypeMap.put(89, "String"); // 89-90 String
      columnTypeMap.put(113, "String"); // 114....
    }

Так что моя идея состоит в том, чтобыиметь файл свойств, например:

 Column0=String
 Column1=String
 Column2=Float
 Column3=String
 Column4=Float
 Column5=Float
 Column6=String
 ...

, а затем выбрать его, вызывая файл свойств:

FileInputStream newFile = new FileInputStream ("dataType.properties");

Properties mappingFile = new Properties();
mappingFile.load(newFile);

mappingFile.load(newFile);

List = mappingFile.getProperties().list(System.out);

static NavigableMap<List> columnTypeMap = null; 
// map is used to identify the column

Ответы [ 3 ]

1 голос
/ 23 мая 2019
try(FileInputStream newFile=new FileInputStream("dataType.properties")) {
  Properties mappingFile =new Properties();
  mappingFile.load(newFile);
  mappingFile.forEach((c,t)-> {
    columnTypeMap.put(Integer.parseInt(((String)c).substring("Column".length())),(String)t);
  });
}
catch(Exception ex) {
  System.error.println(ex);
}

PS: Вы можете просто написать свои свойства как

00=String
01=Float
02=...

и уменьшить часть отображения до

    columnTypeMap.put(Integer.parseInt((String)c),(String)t);
0 голосов
/ 23 мая 2019

Сначала вы можете проверить документацию POI для получения типа данных ячейки .

Если это не сработает, я рекомендую вам взглянуть на Класс свойств Java . Вы можете получить список всех доступных свойств в файле по ключу или по (ключу, значению) . Зная ожидаемый тип данных, обработать ячейку просто: как строка , как двойная .

0 голосов
/ 23 мая 2019

Посмотрите на Apache PropertiesConfiguration . Он по-прежнему решает основы для вас: открыть и проанализировать файл свойств и предоставить его содержимое по ключу. Примеры можно найти в документации.

...