Como formatar a data por extenso em Java


Referência: Como formatar data por extenso - Stack Overflow em Português

Para deixar no formato que você quer e com o mês por extenso:
Date data =  new Date();
Locale local = new Locale("pt","BR");
DateFormat formato = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy",local);
System.out.println(formato.format(data));
Isso vai printar, por exemplo, 27 de Fevereiro de 2016, ou seja, o dia ainda não está por extenso.

Método para colocar o dia por extenso:
public static String getDiaPorExtenso(int dia) throws Exception {
    String dias[] = {"zero", "um", "dois", "três","quatro", "cinco", "seis", "sete", "oito", "nove"};
    String retorno = "";

    if (dia < 1 || dia > 31) {
        throw new Exception("Não existe esse dia em nenhum mês do ano");
    }
    else if (dia < 10) {
        retorno = dias[dia];
    }
    else if (dia < 20) {
        retorno = new String[]{
            "dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove"
        }[dia - 10];
    }
    else if (dia < 30) {
        if (dia == 20) {
            retorno = "vinte";
        }
        else {
            retorno = "vinte e " + dias[dia - 20];
        }
    }
    else {
        if (dia == 30) {
            retorno = "trinta";
        }
        else {
            retorno = "trinta e " + dias[dia - 30];
        }
    }

    // Capitaliza apenas a primeira letra do dia.
    return retorno.substring(0, 1).toUpperCase() + retorno.substring(1);
}
Juntando os dois, você pode exibir o resultado final da seguinte forma:
Date data = new GregorianCalendar(2014, Calendar.FEBRUARY, 11).getTime();
Locale local = new Locale("pt","BR");
DateFormat formato = new SimpleDateFormat(" 'de' MMMM 'de' yyyy", local);
String dataFormatada = formato.format(data);

Calendar calendario = Calendar.getInstance();
calendario.setTime(data);
int dia = calendario.get(Calendar.DAY_OF_MONTH);

System.out.println(getDiaPorExtenso(dia) + dataFormatada);
Saída: Onze de Fevereiro de 2014.

Observação:
Calendar calendario = Calendar.getInstance();
calendario.setTime(data);
int dia = calendario.get(Calendar.DAY_OF_MONTH);
Calendar é utilizado ao invés do mais óbvio data.getDate() porque este último método está deprecated.