"f.canWrite()" ist false, wenn er die Datei nicht zum Schreiben öffnen konnte. Zum Schreiben öffnen heißt, dass die Datei bereits existieren muss. Du musst also vorher überprüfen, ob die Datei überhaupt existiert.
Dein '(!f.canWrite() || !f.createNewFile())' liefert also in allen Fällen true zurück!