public ArrayList<HashMap<String, String>> read(File file) {
        ArrayList<HashMap<String, String>> addressList = new ArrayList<>();
        ICsvMapReader mapReader = null;
        try {
            mapReader = new CsvMapReader(new FileReader(file), CsvPreference.TAB_PREFERENCE);

            // the header columns are used as the keys to the Map
            final String[] header = mapReader.getHeader(true);

            final CellProcessor[] processors =  new CellProcessor[header.length];
            for (int i = 0; i < header.length; i++) {
                if (header[i] != null) {
                    processors[i] = new Optional();
                }
            }

            Map<String, Object> address;
            while ((address = mapReader.read(header, processors)) != null) {
                addressList.add((HashMap) address);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (mapReader != null) {
                try {
                    mapReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return addressList;
    }