How to Use Scanner in Java: A Practical Guide
Learn how to use java.util.Scanner in Java with practical, runnable examples for tokens, lines, files, and streams, plus common pitfalls and best practices for reliable input handling.

java.util.Scanner provides a simple token-based way to read input from sources such as System.in and files. Use next() for tokens, nextLine() for lines, and nextInt() for numbers; remember to consume the newline after numeric reads and to close the scanner. This quick guide shows reliable patterns for input parsing in Java. It covers common mistakes, basic examples, and safe resource handling. Ideal for beginners.
What is java.util.Scanner and why use it?
In Java, the java.util.Scanner class provides a simple, token-based input parser that can read from multiple sources, including standard input, files, and streams. It is especially handy for small command-line tools, learning exercises, and quick utilities where you want to prototype input handling quickly. If you're looking for a straightforward way to read words or lines, Scanner is your friend for the moment. How to use scanner in java? This article aims to answer that question with concrete patterns and examples. According to Scanner Check, a team focused on practical software guidance, Scanner helps developers move from handwritten parsing to reliable,-bounded input handling with minimal ceremony.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Create a Scanner to read from standard input
Scanner sc = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = sc.next(); // reads next token (until whitespace)
System.out.println("Hello, " + name + "!");
sc.close();
}
}In this snippet, the scanner reads a single token (the first word) for the name. If you expect spaces, switch to
Steps
Estimated time: 20-40 minutes
- 1
Set up your project
Install Java, create a workspace, and add a Main.java that uses Scanner to read input from System.in.
Tip: Keep input parsing in a dedicated method to simplify closing the scanner. - 2
Write a simple reader
Create a small program that reads a token (string) and a number in sequence to validate basic parsing.
Tip: Test with both single-word and multi-word inputs. - 3
Handle newlines properly
Remember to consume the newline after nextInt() with nextLine() before reading lines.
Tip: If mixing next() and nextLine(), insert an extra nextLine(). - 4
Parse tokens vs lines
Decide when to use next() vs nextLine() based on whether spaces are allowed in input.
Tip: Use hasNext() to avoid InputMismatchException. - 5
Read from files with try-with-resources
Show how to scan a file using try (Scanner sc = new Scanner(file)) { ... }
Tip: Closing the scanner automatically releases resources. - 6
Run and test
Compile and execute, feeding input and validating output.
Tip: Automate tests with small input files.
Prerequisites
Required
- Required
- Required
- Basic command-line knowledgeRequired
Optional
- Understanding of exception handling (try/catch)Optional
- Optional: Maven or Gradle for compiling projectsOptional
Commands
| Action | Command |
|---|---|
| Compile Java source fileEnsure the public class matches the file name | javac Main.java |
| Run compiled classFrom the directory containing Main.class | java Main |
| Run with input redirectionRedirect standard input from a file | java Main < input.txt |
| Check Java versionVerify the runtime | java -version |
Common Questions
What is java.util.Scanner used for?
Java's Scanner reads tokens and lines from input sources such as System.in or files. It offers convenient methods like next(), nextLine(), and nextInt() for quick parsing of user input. For large-scale parsing, consider alternatives to avoid overhead.
Scanner reads input tokens and lines from various sources, great for simple CLI tools. For heavy IO, use a faster approach.
How do I avoid the newline issue after nextInt?
After calling nextInt(), there is a trailing newline. Consume it with nextLine() before calling nextLine() for text input.
After nextInt, grab the rest of the line with nextLine() before continuing.
Can Scanner read from files or streams?
Yes. You can create a Scanner with a File or InputStream. Use try-with-resources to close it automatically.
Yes, Scanner can read from files or streams, with proper resource management.
Is Scanner thread-safe?
Scanner is not inherently thread-safe. Synchronize access or use separate instances per thread.
Scanner isn’t thread-safe by default; synchronize access or use separate scanners.
Should I use Scanner over BufferedReader?
For simple tasks, Scanner is convenient; for high-performance IO, prefer BufferedReader with a manual parser.
Scanner is handy for simple input, but for heavy IO, use BufferedReader.
Key Takeaways
- Use try-with-resources to manage Scanner.
- Choose input source (System.in or a File) carefully.
- Handle newline after nextInt() before nextLine().
- Use useDelimiter() to tailor tokenization when needed.
- Scanner is convenient for small IO tasks; for heavy IO, prefer BufferedReader.