Scanner class in Java (java.util.Scanner
) was introduced in Java 1.5 as a simple text scanner which can parse primitive types and strings using regular expressions.
Scanner Class in Java
Java Scanner class can be used to break the input into tokens with any regular expression delimiter and it’s good for parsing files also.
Scanner class can be used to read file data into primitive. It also extends String split() method to return tokens as String, int, long, Integer and other wrapper classes.
Java Scanner Example
Here I am using Scanner to read a file line by line, parsing a CSV file to create java object easily and read from the user input.
JavaFileScanner.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
package com.journaldev.files; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Scanner; public class JavaFileScanner { public static void main(String[] args) throws IOException { /** * My Name is Pankaj * My website is journaldev.com * Phone : 1234567890 */ String fileName = "/Users/pankaj/source.txt"; Path path = Paths.get(fileName); Scanner scanner = new Scanner(path); //read file line by line scanner.useDelimiter(System.getProperty("line.separator")); while(scanner.hasNext()){ System.out.println("Lines: "+scanner.next()); } scanner.close(); //read CSV Files and parse it to object array /** * Pankaj,28,Male * Lisa,30,Female * Mike,25,Male */ scanner = new Scanner(Paths.get("/Users/pankaj/data.csv")); scanner.useDelimiter(System.getProperty("line.separator")); while(scanner.hasNext()){ //parse line to get Emp Object Employee emp = parseCSVLine(scanner.next()); System.out.println(emp.toString()); } scanner.close(); //read from system input System.out.println("Read from system input:"); scanner = new Scanner(System.in); System.out.println("Input first word: "+scanner.next()); } private static Employee parseCSVLine(String line) { Scanner scanner = new Scanner(line); scanner.useDelimiter("\s*,\s*"); String name = scanner.next(); int age = scanner.nextInt(); String gender = scanner.next(); JavaFileScanner jfs = new JavaFileScanner(); return jfs.new Employee(name, age, gender); } public class Employee{ private String name; private int age; private String gender; public Employee(String n, int a, String gen){ this.name = n; this.age = a; this.gender = gen; } @Override public String toString(){ return "Name="+this.name+"::Age="+this.age+"::Gender="+this.gender; } } } |
Output of the above program is:
1 2 3 4 5 6 7 8 9 10 11 |
<span style="color: #008000;"><strong><code> Lines: My Name is Pankaj Lines: My website is journaldev.com Lines: Phone : 1234567890 Name=Pankaj::Age=28::Gender=Male Name=Lisa::Age=30::Gender=Female Name=Mike::Age=25::Gender=Male Read from system input: Pankaj Kumar Input first word: Pankaj </code></strong></span> |
We can use java Scanner class to parse the input into specific datatype tokens.
Read this post to learn how to read CSV File using Scanner.
Reference: API Doc