Android: Como escrever um arquivo para o armazenamento interno
estou a desenvolver uma simples aplicação android e preciso de escrever um ficheiro de texto no dispositivo de armazenamento interno. Sei que há muitas perguntas (e respostas) sobre este assunto, mas realmente não consigo entender o que estou fazendo da maneira errada.
Este é o código que uso na minha actividade para escrever o ficheiro:
public void writeAFile(){
String fileName = "myFile.txt";
String textToWrite = "This is some text!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(fileName , Context.MODE_PRIVATE);
outputStream.write(textToWrite.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
realmente não consigo entender que erro estou a fazer. Além disso, tentei este projecto no meu emulador no Android Studio e no meu telefone, a fim de entender onde eu estou fazendo algo errado, mas mesmo com esse projeto nenhum arquivo é escrito Nem no telefone ou no emulador.
editar: Eu sei que nenhum arquivo está escrito no meu armazenamento interno porque eu tento ler o conteúdo do arquivo, depois de ter escrito para ele, com este código:
public void ReadBtn(View v) {
//reading text from file
try {
FileInputStream fileIn=openFileInput("myFile.txt");
InputStreamReader InputRead= new InputStreamReader(fileIn);
char[] inputBuffer= new char[READ_BLOCK_SIZE];
String s="";
int charRead;
while ((charRead=InputRead.read(inputBuffer))>0) {
String readstring=String.copyValueOf(inputBuffer,0,charRead);
s +=readstring;
}
InputRead.close();
textmsg.setText(s);
} catch (Exception e) {
e.printStackTrace();
}
}
Nada é mostrado.
5 answers
Usar abaixo do código para gravar um ficheiro no armazenamento interno
Editar: Adicionado e.printStackTrace();
para capturar o bloco como uma boa prática e lembretes de permissões
public void writeFileOnInternalStorage(Context mcoContext,String sFileName, String sBody){
File file = new File(mcoContext.getFilesDir(),"mydir");
if(!file.exists()){
file.mkdir();
}
try{
File gpxfile = new File(file, sFileName);
FileWriter writer = new FileWriter(gpxfile);
writer.append(sBody);
writer.flush();
writer.close();
}catch (Exception e){
e.printStackTrace();
}
}
E não se esqueça de adicionar permissões externas de escrita e leitura no manifesto:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Nenhum ficheiro está escrito Nem no telefone nem no emulador.Sim, há. Está escrito para o que o SDK Android se refere como armazenamento interno . Isto é Não o que você como utilizador considera ser "armazenamento interno", e você como utilizador não consegue ver o que está no armazenamento interno num dispositivo (a menos que esteja enraizado).
Se quiser escrever um ficheiro para onde os utilizadores o possam ver, use armazenamento externo .
Este tipo de base O tópico de desenvolvimento do Android está coberto em qualquer livro decente sobre desenvolvimento do aplicativo Android.Já pediu permissão para escrever no armazenamento externo?
Https://developer.android.com/training/basics/data-storage/files.html#GetWritePermission
Talvez o teu bloqueio de tentar apanhar esteja a engolir uma excepção que pode estar a dizer-te Qual é o problema.Além disso, não parece estar a definir o caminho para onde gravar.
E. g.: Android como usar o ambiente.getExternalStorageDirectory()
Guardar para armazenamento interno
data="my Info to save";
try {
FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
fOut.write(data.getBytes());
fOut.close();
Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lido a partir do armazenamento interno
try {
FileInputStream fin = openFileInput(file);
int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
tv.setText(temp);
Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
}
catch(Exception e){
}
Tive um problema semelhante, o ficheiro foi escrito, mas nunca o vi. Usei o Explorador de ficheiros do dispositivo e estava lá à minha espera.Para ver os ficheiros num dispositivo, poderá registar a localização do ficheiro >fornecida por métodos como o ficheiro.getAbsolutePath (), and >then browse the device files with Android Studio's Device >File Explorer.
String filename = "filename.jpg";
File dir = context.getFilesDir();
File file = new File(dir, filename);
try {
Log.d(TAG, "The file path = "+file.getAbsolutePath());
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
return true;