Grave em interno, externo, SD qualquer arquivo no Android

Estou procurando um post direto sobre isso e não consegui encontrar.

O Android possui interno / externo possível para gravar seus dados.

public void writeData(){
File folder = getFolder();
File file = new File(folder,"file.txt");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream os = new ObjectOutputStream(fos);
os
.writeChars("HelloAndroid");
}

public File getFolder(){
//All this are options:
return ctx.getDir(Context.MODE_PRIVATE); //Internal
return ctx.getExternalFilesDir(); // External Private
return ctx.getExternalCacheDir();//External Private Cache
return Environment.getExternalStoragePublicDirectory(); //External Shared
return Environment.getExternalStorageDirectory(); // External Private Prior API7
}

A primeira pergunta é o que usar?

Interno – apenas o aplicativo pode acessar; se o aplicativo for desinstalado, os dados também serão excluídos.

Privado externo – Apenas seu aplicativo pode acessar, MAS o usuário também pode acessar.

Cache Privado Externo – Mesmo Privado Externo, mas se desinstalar o aplicativo, os dados também serão excluídos.

Compartilhado externo – Seu aplicativo e outros aplicativos (e o usuário) podem acessar os dados.

A segunda pergunta é: como colocar no cartão SD?
Você não pode colocar diretamente no cartão SD, este é o controle de preferência do usuário e da fábrica do telefone.

Espero ajudar alguém =)