public <T> void exportToCsv(String fileName, Iterator<T> data) { try { Files.createDirectories(Paths.get(DIR)); StringBuilder content = new StringBuilder(); List<Method> getters = null; while (data.hasNext()) { T t = data.next(); if (getters == null) { getters = ReflectionUtil.getAllGetters(t.getClass()); getters.sort((a, b) -> a.getName().length() - b.getName().length()); } for (Method getter : getters) { try { String value = String.valueOf(getter.invoke(t)); content.append(value).append(','); } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } } content.append('\n'); } Files.write( Paths.get(DIR + fileName), content.toString().getBytes("UTF-8"), CREATE, WRITE, StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { e.printStackTrace(); } }