Java Todo List Manager: Features, Code Samples, and Best Practices

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

  1. Parse simple commands in Main loop.
  2. Keep tasks in an in-memory List.
  3. TaskStorage reads/writes JSON (use Jackson or simple line format).
  4. TaskService provides add/list/complete/delete operations.
  5. Auto-assign incremental IDs.

Sample JSON format

[ {“id”:1,“title”:“Buy milk”,“description”:“”,“createdAt”:“2026-02-05T12:00:00Z”,“completed”:false} ]

30-minute breakdown

  1. 0–5 min: create project, classes, Task model.
  2. 5–15 min: implement TaskService and in-memory operations.
  3. 15–25 min: implement CLI parsing and commands.
  4. 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.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *