Home

9. Reading a Text File

Home » Java Quick Start » Quick Start Tutorial » 9. Reading a Text File

Tips!

Let's read some data from an external source to combine all we learned before...

With a free online tool we create a test CSV file with random data. This file is stored in a subdirectory resources as testdata.csv.

The file in the source code contains comma-separated values for counter, firstname, lastname, age, Street, City, State, ZIP:

1,Ada,Gomez,40,Mabvob Pike,Radafso,LA,60500
2,Bernard,Jordan,28,Dotcu Court,Cewbufbim,MS,17422
3,Mittie,Vaughn,64,Nandac Mill,Patunif,RI,81182
4,Miguel,Clarke,39,Liac Boulevard,Deguci,NH,32207
...

Let's write a program to read this CSV-file line by line and convert each line to an object which is added to a list of persons:

1,Ada,Gomez,40,Mabvob Pike,Radafso,LA,60500 2,Bernard,Jordan,28,Dotcu Court,Cewbufbim,MS,17422 3,Mittie,Vaughn,64,Nandac Mill,Patunif,RI,81182 4,Miguel,Clarke,39,Liac Boulevard,Deguci,NH,32207 5,Justin,Luna,37,Ucago Street,Loderuni,LA,21387 6,Adrian,Caldwell,35,Helfuz Manor,Pibvacgef,AZ,77766 7,Dale,Kelley,59,Viwo Square,Fepmoreb,AZ,80979 8,Bertha,Hernandez,34,Domo Path,Osipikuz,WV,50477 9,Roy,Perry,47,Ezokev Trail,Seruipe,MA,89600 10,Leona,Barber,41,Vaboz Key,Kovule,NE,45175 11,Ina,Washington,37,Fobug Terrace,Narhespi,MI,78272 12,Mitchell,Bowen,27,Jandob Plaza,Wuzgagsav,MT,62287 13,Leo,Romero,59,Leruk Mill,Debulot,VT,83857 14,Ricky,Welch,19,Uvujud Grove,Capbowji,WY,45847 15,Edna,Pierce,28,Biju Circle,Soucetum,KY,31995 16,Caroline,Chambers,62,Lordi Center,Goegdu,MI,59747 17,Cory,Howard,25,Gahu Way,Tewtilef,MN,03570 18,Frances,Vega,63,Ricvut Trail,Rogosiz,CO,13000 19,Charlotte,McCarthy,29,Egeta River,Uzejoriz,HI,71991 20,Janie,Mathis,43,Buhe Junction,Gedivu,MT,30475 21,Antonio,Shaw,64,Ihgih Place,Wopunum,OK,08525 22,Matilda,Henry,18,Fiwahu Road,Etudafuc,CT,48030 23,Lewis,Lyons,54,Bici Grove,Udzenva,RI,82279 24,Ida,Frazier,60,Vomo Road,Peddozuk,CO,43840 25,Lenora,Bowers,38,Zesido Pass,Ekivilis,AL,64218 26,Steven,Butler,51,Ipuf Terrace,Tonapu,NM,71572 27,Eliza,Wright,22,Haje Drive,Kublehef,LA,37560 28,Fanny,Robbins,31,Jiesa Grove,Bemdabju,VT,31330 29,Carrie,Wade,42,Fafi View,Buezren,MO,13874 30,Lottie,Fernandez,52,Gafe Point,Cakoetu,UT,62399 31,Lou,Elliott,47,Olunu Pike,Gujtoje,OR,01854 32,Irene,Williamson,56,Kesi Place,Upkohud,NC,16579 33,Jeremy,Roberson,44,Jaade Place,Luvsojo,AZ,79333 34,Violet,Mann,35,Berowa Circle,Rotehdi,TX,81721 35,Isaiah,Fowler,48,Deij Pike,Gajrikun,MD,34612 36,Johnny,Stone,23,Hiho View,Upzavsug,KY,54162 37,Hulda,Wong,60,Meok Grove,Eduzeulu,OR,58099 38,Jeffery,Mason,23,Zudho Circle,Udougiji,SC,47700 39,Gregory,Freeman,55,Nanci Trail,Ohhabza,SC,40015 40,Inez,Byrd,41,Jada Place,Livuulu,WV,65150 41,Charlotte,Weber,49,Domu Manor,Kanazijod,DC,86033 42,Johanna,Moreno,47,Zejku Grove,Gurfokub,CT,98543 43,Carlos,Colon,51,Agcah Trail,Jevasvan,IN,34068 44,Maurice,Norton,42,Gokta Way,Vidhonlo,OR,44786 45,Antonio,Bennett,37,Sewwiv Drive,Fuggifbo,TX,60290 46,Bill,Mendez,32,Havtad Trail,Ehoheig,AK,81866 47,Jorge,Alvarez,59,Hacgof Trail,Vufozbaj,IA,17941 48,Evan,Rodgers,50,Raphus Key,Hogbeteh,OR,74817 49,Johnny,Cunningham,34,Epejoc Avenue,Ugavamje,SD,07482 50,Delia,Fuller,27,Zogo Heights,Siosso,OK,45460 51,Luke,Guerrero,64,Foci Center,Sitwiscel,VT,18079 52,Jesse,Stevenson,22,Weip Terrace,Sizjoco,NV,94954 53,Joe,Conner,25,Vonod Pike,Jifonev,IA,53502 54,Nathan,Parker,20,Sedona Pass,Vazkowi,OK,60390 55,Charlotte,McGee,47,Sawha Circle,Ugegozvub,MD,47279 56,Matthew,Wade,65,Kussiz Way,Evkuham,KS,66566 57,Ola,Wade,48,Viwuc Junction,Tohigwo,MS,19691 58,Landon,Arnold,53,Pofo Circle,Nuonevid,OH,94843 59,Ronald,Rodriquez,55,Janu Turnpike,Soupce,TX,98285 60,Mitchell,Sanders,57,Cobzu Point,Ottumoj,NH,52145 61,Rosalie,McCoy,23,Vuihu Drive,Reppaltog,CT,38428 62,Harry,Harmon,64,Acufob Avenue,Cotjojnoh,WV,36065 63,Clifford,Waters,55,Aguak Grove,Bevjilel,HI,52017 64,Clarence,George,43,Fuzzes Pass,Ahmedmen,ID,66324 65,Dorothy,French,29,Hulav View,Kekomva,MA,45860 66,Jon,Ferguson,18,Kalcup Trail,Hudzawdap,IL,22215 67,Mario,Myers,42,Owohem Terrace,Dusmobdi,IA,23546 68,Allie,Andrews,49,Nicnat Park,Anuvalu,ID,72182 69,Dollie,Page,29,Cinit Lane,Ebniri,MA,22583 70,Carolyn,Marshall,30,Jozdav Loop,Sudkiisu,MT,10718 71,Ray,Fowler,51,Gadwe Square,Beneriz,DC,59681 72,Janie,Byrd,65,Bukaba Extension,Dajodgiv,WA,56046 73,Harold,Burns,21,Uslof Circle,Heuzju,WI,55665 74,Rhoda,Wade,38,Udri River,Wupegloj,TN,10147 75,Wayne,Sullivan,31,Tekfus Street,Siczobic,WI,52959 76,Gerald,Cook,23,Nujagu Street,Zozapwe,VT,93383 77,Edith,Crawford,35,Jujte Key,Sucditsu,MO,32067 78,Thomas,Reid,26,Sawcen Street,Narizfu,MD,44883 79,Vernon,Garrett,55,Ralro Square,Vatinmi,OH,02308 80,Charles,McBride,62,Bijiv Ridge,Kidanet,NE,66994 81,Callie,Ball,57,Ruvaja Avenue,Zohgacken,FL,15755 82,Minnie,Gibbs,62,Setu Square,Gadutna,GA,52897 83,Rena,Henry,43,Matban Pass,Ciijmoc,NJ,94606 84,Ethan,Park,30,Zowi Glen,Dufkofnof,NY,84610 85,Matthew,Harmon,43,Labot View,Amtojepi,NM,71077 86,Duane,Salazar,19,Bivoz Extension,Volovik,WA,86567 87,Hannah,Olson,47,Kizvo Pike,Paksonle,NC,80126 88,Henrietta,Sparks,37,Konaw Avenue,Hullikgu,AK,71124 89,Emma,Schultz,53,Tidnod Pike,Ununehas,IN,01641 90,Ophelia,Fleming,46,Umigeb Pike,Huzhewsez,DC,94926 91,Emilie,Henry,63,Zepet Manor,Sitgordez,RI,26612 92,Rachel,Conner,57,Muhot View,Obkivutu,OK,54753 93,Nelle,Caldwell,54,Vunvu Key,Zedteaco,WI,49044 94,Jose,Brooks,60,Givaz View,Conemido,TX,99776 95,Eula,Knight,60,Gafvel Terrace,Bucopop,AL,66582 96,Etta,McKenzie,43,Ucji Boulevard,Muizwir,VA,43886 97,David,Gutierrez,47,Pahmus Loop,Cuufca,MT,10341 98,Charlotte,Scott,26,Nanli Extension,Mucihuv,TN,24687 99,Alexander,McCoy,46,Huvahi Drive,Oljenbek,NH,19102 100,Callie,Fitzgerald,32,Maduv Circle,Socoeji,NJ,14602
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class ReadTextFile { public static void main (String[] args) { List<Person> persons = loadPersons(); System.out.println("Number of persons loaded from CSV file: " + persons.size()); for (Person person : persons) { System.out.println(person.getFullName() + ", age: " + person.getAge()); } } public static List<Person> loadPersons() { List list = new ArrayList<>(); File file = new File("/uploads/testdata.csv"); try (Scanner scanner = new Scanner(file)) { while (scanner.hasNextLine()) { list.add(new Person(scanner.nextLine())); } } catch (FileNotFoundException ex) { System.err.println("Could not find the file to be loaded"); } return list; } public static class Person { private int id; private String firstName; private String lastName; private int age; private String street; private String city; private String state; private int zip; public Person(String csvLine) { String[] data = csvLine.split(","); this.id = Integer.valueOf(data[0]); this.firstName = data[1]; this.lastName = data[2]; this.age = Integer.valueOf(data[3]); this.street = data[4]; this.city = data[5]; this.state = data[6]; this.zip = Integer.valueOf(data[7]); } public String getFirstName() { return firstName; } public String getFullName() { return firstName + " " + lastName; } public int getAge() { return age; } } }

Just like in the UsingObjects-example, we use an object to store the data of each line in the CSV file, in this case, the object Person.

Within the loadPersons-method:

  • the file is opened
  • read line by line
  • the text of each line is used to create a Person-object
  • this object is added to the list
  • the list is returned.

Within the main-method, the resulting list is used:

  • to count the number of persons on the list
  • to print each person's full name and age
$ java ReadTextFile.java
Number of persons loaded from CSV file: 100
Ada Gomez, age: 40
Bernard Jordan, age: 28
Mittie Vaughn, age: 64
Miguel Clarke, age: 39
...

Subscribe to foojay updates:

https://foojay.io/feed/
Copied to the clipboard