Java Todo List Manager — Build a Simple Task App in 30 Minutes
Goal
Create a minimal, functional Java Todo List Manager (console + file persistence) in ~30 minutes that supports adding, listing, marking complete, deleting, and saving tasks.
Tech stack
- Java 11+ (console app)
- Plain text or JSON file for persistence
- Optional: Maven, JUnit for tests
Project structure
- src/
- Main.java — CLI entry
- model/Task.java — Task data
- storage/TaskStorage.java — load/save tasks
- service/TaskService.java — business logic
- util/ConsoleUtils.java — input/output helpers
Data model (Task)
- id: int
- title: String
- description: String (optional)
- createdAt: Instant
- completed: boolean
Features & commands
- add “title” [“description”] — create task
- list [all|active|completed] — show tasks
- done— mark complete
- delete — remove task
- save — persist now (also auto-save on exit)
- help, exit
Minimal implementation outline
- Parse simple commands in Main loop.
- Keep tasks in an in-memory List.
- TaskStorage reads/writes JSON (use Jackson or simple line format).
- TaskService provides add/list/complete/delete operations.
- Auto-assign incremental IDs.
Sample JSON format
[ {“id”:1,“title”:“Buy milk”,“description”:“”,“createdAt”:“2026-02-05T12:00:00Z”,“completed”:false} ]
30-minute breakdown
- 0–5 min: create project, classes, Task model.
- 5–15 min: implement TaskService and in-memory operations.
- 15–25 min: implement CLI parsing and commands.
- 25–30 min: add simple JSON persistence and quick manual test.
Extensions (optional)
- Use SQLite or H2 for persistence
- Add deadlines, priorities, tags
- Provide GUI with JavaFX or Swing
- Sync with cloud (REST API)
- Add unit tests (JUnit) and input validation
Quick code snippet — adding a task (conceptual)
java
Task addTask(String title, String description) { Task t = new Task(nextId++, title, description, Instant.now(), false); tasks.add(t); return t; }
Tips
- Keep CLI parsing simple (split on space, accept quoted strings).
- Persist after each change for safety.
- Use UUIDs if concurrent runs possible.
Leave a Reply