{"id":329559,"date":"2024-05-27T07:54:34","date_gmt":"2024-05-27T07:54:34","guid":{"rendered":"https:\/\/www.baeldung.com\/reading-csv-headers-into-a-list"},"modified":"2024-05-27T07:54:34","modified_gmt":"2024-05-27T07:54:34","slug":"reading-csv-headers-into-a-list","status":"publish","type":"post","link":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/2024\/05\/27\/reading-csv-headers-into-a-list\/","title":{"rendered":"Reading CSV Headers Into a List"},"content":{"rendered":"<p class=\"syndicated-attribution\"><meta name= \\\"keywords \\\" content= \\\"\u96fb\u5b50\u8a08\u7b97\u6a5f, \u6559\u80b2, IT \u96fb\u8166\u73ed,\u96fb\u8166\u88dc\u7fd2\uff0c \u96fb\u8166\u73ed\uff0c \u5bb6\u6559\uff0c \u79c1\u4eba\u8001\u5e2b\uff0c \u8cc7\u8a0a\u6280\u8853\uff0c \u7a0b\u5e8f\u8a2d\u8a08\uff0c \u96fb\u5b50\u8a08\u7b97\u6a5f\uff0c \u904a\u6232\uff0c \u860b\u679c\uff0c \u96fb\u5f71\uff0c \u8a08\u7b97\u6a5f\uff0c\u7de8\u78bc\uff0c Java\uff0c C\/C++\uff0c JavaScript\uff0c PHP\uff0c HTML\uff0c CSS\uff0c MySQL\uff0c mobile\uff0c Android\uff0c \u52d5\u6f2b\uff0c Python\uff0c teacher\uff0c \u88dc\u7fd2\uff0c \u96fb\u8166\u88dc\u7fd2 \u8cc7\u8a0a, \u7535\u5b50\u8ba1\u7b97\u673a, IT ,Game, apple, movie, Computer,student,Java,\u6559\u80b2, ,\u5b66\u751f, \u5b66\u4e60, learn, \u6559\u5b66,  Android, apple,anime, animation, \u4fe1\u606f\u6280\u672f, \u7a0b\u5e8f\u8bbe\u8ba1, \u79fb\u52a8\u7535\u8bdd, \u8cc7\u8a0a\u79d1\u6280,Game, Jeu, Juego,Call Of Duty ,\u4f7f\u547d\u53ec\u559a , \u6e38\u620f, \u7535\u5b50\u6e38\u620f,, \u591a\u4eba\u7535\u5b50\u6e38\u620f, \u7f51\u7edc\u6e38\u620f\uff0conline\uff0conline game, \u624b\u673a\u6e38\u620f, mobile \\\"><\/p>\n<p><img src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2016\/10\/social-Java-On-Baeldung-2.jpg\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" style=\"float: left; margin-right: 5px;\" decoding=\"async\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2016\/10\/social-Java-On-Baeldung-2.jpg 952w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2016\/10\/social-Java-On-Baeldung-2-300x157.jpg 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2016\/10\/social-Java-On-Baeldung-2-768x402.jpg 768w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<h2 id=\"bd-overview\" data-id=\"overview\">1. Overview<\/h2>\n<div class=\"bd-anchor\" id=\"overview\"><\/div>\n<p>In this short tutorial, we&#8217;ll explore different ways of reading <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-csv-file-array\">CSV<\/a> headers into a list in Java.<\/p>\n<p>First, we&#8217;ll learn how to do this using JDK classes. Then, we&#8217;ll see how to achieve the same objective using external libraries such as <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/opencsv\">OpenCSV<\/a> and <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/apache-commons-csv\">Apache Commons CSV<\/a>.<\/p>\n<h2 id=\"bd-using-bufferedreader\" data-id=\"using-bufferedreader\">2. Using <em>BufferedReader<\/em><\/h2>\n<div class=\"bd-anchor\" id=\"using-bufferedreader\"><\/div>\n<p>The <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-buffered-reader\"><em>BufferedReader<\/em><\/a> class provides the easiest solution to tackle our challenge. <strong>It offers a fast and efficient way to read a CSV file as it reduces the number of IO operations by reading the content chunk by chunk<\/strong>.<\/p>\n<p>So, let&#8217;s see it in action:<\/p>\n<pre><code class=\"language-java\">class CsvHeadersAsListUnitTest {\r\n    private static final String CSV_FILE = &quot;src\/test\/resources\/employees.csv&quot;;\r\n    private static final String COMMA_DELIMITER = &quot;,&quot;;\r\n    private static final List&lt;String&gt; EXPECTED_HEADERS = List.of(&quot;ID&quot;, &quot;First name&quot;, &quot;Last name&quot;, &quot;Salary&quot;);\r\n    @Test\r\n    void givenCsvFile_whenUsingBufferedReader_thenGetHeadersAsList() throws IOException {\r\n        try (BufferedReader reader = new BufferedReader(new FileReader(CSV_FILE))) {\r\n            String csvHeadersLine = reader.readLine();\r\n            List&lt;String&gt; headers = Arrays.asList(csvHeadersLine.split(COMMA_DELIMITER));\r\n            assertThat(headers).containsExactlyElementsOf(EXPECTED_HEADERS);\r\n        }\r\n    }\r\n}<\/code><\/pre>\n<p>As we can see, we use\u00a0<a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-try-with-resources\">try-<\/a><a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-try-with-resources\">with<\/a><a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-try-with-resources\">-resources<\/a> to create a <em>BufferedReader<\/em> instance. That way, we make sure that the file is closed afterward. <strong>Furthermore, we invoke the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-buffered-reader#2-reading-line-by-line\"><em>readLine()<\/em><\/a> method once to extract the first line which denotes the headers<\/strong>. Finally, we use the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/string\/split\"><em>split()<\/em><\/a> method alongside <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-arrays-aslist-vs-new-arraylist#arraysaslist\"><em>Arrays#asList<\/em><\/a> to get the headers as a list.<\/p>\n<h2 id=\"bd-using-scanner\" data-id=\"using-scanner\">3. Using <em>Scanner<\/em><\/h2>\n<div class=\"bd-anchor\" id=\"using-scanner\"><\/div>\n<p>The <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-scanner\"><em>Scanner<\/em><\/a> class provides another solution to achieve the same outcome. As the name implies, <strong>it scans and reads the content of a given file<\/strong>. So, let&#8217;s add another test case to see how to use <em>Scanner<\/em> to read CSV file headers:<\/p>\n<pre><code class=\"language-java\">@Test\r\nvoid givenCsvFile_whenUsingScanner_thenGetHeadersAsList() throws IOException {\r\n    try(Scanner scanner = new Scanner(new File(CSV_FILE))) {\r\n        String csvHeadersLine = scanner.nextLine();\r\n        List&lt;String&gt; headers = Arrays.asList(csvHeadersLine.split(COMMA_DELIMITER));\r\n        assertThat(headers).containsExactlyElementsOf(EXPECTED_HEADERS);\r\n    }\r\n}<\/code><\/pre>\n<p>Similarly, the <em>Scanner<\/em> class has the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-scanner-nextline\"><em>nextLine()<\/em><\/a> method that we can use to get the first line of the input file. Here, the first line represents the headers of our CSV file.<\/p>\n<h2 id=\"bd-using-opencsv\" data-id=\"using-opencsv\">4. Using OpenCSV<\/h2>\n<div class=\"bd-anchor\" id=\"using-opencsv\"><\/div>\n<p>Alternatively, we can use the OpenCSV library to read the headers of a particular CSV file. Before getting into the nitty-gritty, let&#8217;s add its <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/mvnrepository.com\/artifact\/com.opencsv\/opencsv\">Maven dependency<\/a> to the <em>pom.xml<\/em> file:<\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\r\n    &lt;groupId&gt;com.opencsv&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;opencsv&lt;\/artifactId&gt;\r\n    &lt;version&gt;5.9&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/code><\/pre>\n<p>Typically,<strong> OpenCSV comes with a set of ready-to-use classes and methods for reading and parsing CSV files<\/strong>. So, let&#8217;s exemplify the use of this library with a practical example:<\/p>\n<pre><code class=\"language-java\">@Test\r\nvoid givenCsvFile_whenUsingOpenCSV_thenGetHeadersAsList() throws CsvValidationException, IOException {\r\n    try (CSVReader csvReader = new CSVReader(new FileReader(CSV_FILE))) {\r\n        List&lt;String&gt; headers = Arrays.asList(csvReader.readNext());\r\n        assertThat(headers).containsExactlyElementsOf(EXPECTED_HEADERS);\r\n    }\r\n}<\/code><\/pre>\n<p>As we see above, OpenCSV offers the class <em>CSVReader<\/em> to read a given file&#8217;s content. <strong>The <em>CSVReader<\/em> class provides the <em>readNext()<\/em> method to retrieve the next first line directly as a <em>String<\/em> array<\/strong>.<\/p>\n<h2 id=\"bd-using-apache-commons-csv\" data-id=\"using-apache-commons-csv\">5. Using Apache Commons CSV<\/h2>\n<div class=\"bd-anchor\" id=\"using-apache-commons-csv\"><\/div>\n<p>Another solution is to use the Apache Commons CSV library. As the name suggests, it offers several handy features for creating and reading CSV files.<\/p>\n<p>To start, we need to add the latest version of its <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/mvnrepository.com\/artifact\/org.apache.commons\/commons-csv\">dependency<\/a> to <em>pom.xml<\/em>:<\/p>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\r\n    &lt;groupId&gt;org.apache.commons&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;commons-csv&lt;\/artifactId&gt;\r\n    &lt;version&gt;1.11.0&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n<\/code><\/pre>\n<p><strong>In short, the <em>CSVParser<\/em> class of Apache Commons CSV provides the <em>getHeaderNames()<\/em> method to return a read-only list of header names<\/strong>:<\/p>\n<pre><code class=\"language-java\">@Test\r\nvoid givenCsvFile_whenUsingApacheCommonsCsv_thenGetHeadersAsList() throws IOException {\r\n    CSVFormat csvFormat = CSVFormat.DEFAULT.builder()\r\n      .setDelimiter(COMMA_DELIMITER)\r\n      .setHeader()\r\n      .build();\r\n    try (BufferedReader reader = new BufferedReader(new FileReader(CSV_FILE));\r\n        CSVParser parser = CSVParser.parse(reader, csvFormat)) {\r\n        List&lt;String&gt; headers = parser.getHeaderNames();\r\n        assertThat(headers).containsExactlyElementsOf(EXPECTED_HEADERS);\r\n    }\r\n}<\/code><\/pre>\n<p>Here, we use the <em>CSVParser<\/em> class to parse the input file according to the format specified. <strong>The headers are parsed automatically from the input file with the help of the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/commons.apache.org\/proper\/commons-csv\/apidocs\/org\/apache\/commons\/csv\/CSVFormat.Builder.html#setHeader(java.lang.String...)\"><em>setHeader()<\/em><\/a> method<\/strong>.<\/p>\n<h2 id=\"bd-conclusion\" data-id=\"conclusion\">6. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p>In this short article, we explored different solutions for reading CSV file&#8217;s headers as a list.<\/p>\n<p>First, we learned how to do this using JDK. Then, we saw how to achieve the same objective using external libraries.<\/p>\n<p>As always, the code used in this article can be found <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/core-java-modules\/core-java-io-conversions-3\">over on GitHub<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/897762905\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/897762905\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2016%2F10%2Fsocial-Java-On-Baeldung-2.jpg\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Post to X.com\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/x.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/csv-headers-list-read#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/csv-headers-list-read\/feed\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<p class=\"syndicated-attribution\"><figure class= \\\"wp-block-image alignnone \\\"><img src= \\\"http:\/\/itteacheritfreelance.hk\/test\/wordpress\/wp-content\/uploads\/2016\/05\/logo2-2.png\\\" alt=\\\"IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\\\"\/><figcaption>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427!<\/figcaption><\/figure>\r\n<\/br>Find A Teacher Form:\r\n<\/br>https:\/\/docs.google.com\/forms\/d\/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ\/viewform?edit_requested=true#responses\r\n<\/br><\/br>Email:\r\n<\/br>public1989two@gmail.com<br><br><br><br><br><br><br>\r\n<a href=www.itsec.hk style=color:#FFFFFF;>www.itsec.hk<\/a><br>\r\n<a href=\\\"www.itsec.vip\\\" style=color:#FFFFFF;>www.itsec.vip<\/a><br>\r\n<a href=\\\"www.itseceu.uk\\\" style=color:#FFFFFF;>www.itseceu.uk<\/a><br><\/p>","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p><img decoding=\"async\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2016\/10\/social-Java-On-Baeldung-2.jpg\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\"><\/p>\n<p>Learn how to read CSV headers into a list in Java using JDK classes, OpenCSV, and Apache Commons CSV. Explore these efficient methods with code examples for each approach.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>\u00a0<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/897762905\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2016%2F10%2Fsocial-Java-On-Baeldung-2.jpg\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>\u00a0<a title=\"Post to X.com\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/x.png\"><\/a>\u00a0<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>\u00a0<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/897762905\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>\u00a0<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/csv-headers-list-read#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>\u00a0<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/csv-headers-list-read\/feed\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>\u00a0<\/div>\n<\/div>","protected":false},"author":792,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"slim_seo":{"title":"Reading CSV Headers Into a List - ITTeacherITFreelance.hk","description":"Learn how to read CSV headers into a list in Java using JDK classes, OpenCSV, and Apache Commons CSV. Explore these efficient methods with code examples for eac"},"footnotes":""},"categories":[6,1307],"tags":[10801,10802],"_links":{"self":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/329559"}],"collection":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/792"}],"replies":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=329559"}],"version-history":[{"count":1,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/329559\/revisions"}],"predecessor-version":[{"id":329560,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/329559\/revisions\/329560"}],"wp:attachment":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=329559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=329559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=329559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}