Ok. Deduco quindi che è un testo "puro" (non è il .doc di Ms Office).
Innanzitutto non basta ovviamente leggere una sola riga. Vanno lette tutte le righe. Si fa quindi un ciclo "finché ci sono righe" (che tecnicamente vuol dire ciclare finché readLine() restituisce diverso da null).
Le righe "vuote" le puoi anche saltare. Fai un trim() della riga di testo (per eliminare eventuali spazi) e se risulta vuota (lunghezza 0 o uguale a "") allora non la consideri.
Le altre righe invece le analizzi. Ora, quei mediaA, mediaB ecc.. sono sempre così? Cioè cosa ci può essere prima del numero? Se sai che c'è una sola parola prima del numero, puoi usare Scanner per tokenizzare la riga: butti via il primo token (la parola) e poi prendi un token double.
Attenzione, vedo una virgola in 32,33. Scanner gestisce l'input "localizzato", se il tuo sistema ha la lingua italiana predefinita, allora 32,33 è corretto come double interpretato da Scanner.
Chiaramente per ogni double che estrai, lo sommi in una variabile e incrementi un contatore. Alla fine fai quel calcolo che hai detto.
Se hai dubbi più precisi, chiedi.
P.S. NON fare tutto questo nel actionPerformed, separa le cose e fai almeno un metodo separato.