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.

Author: delca85, 2017-06-16

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" />
 12
Author: Sandeep dhiman, 2018-04-26 05:52:26
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.
 7
Author: CommonsWare, 2017-06-16 10:56:54

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()

 0
Author: Kuffs, 2017-06-16 10:43:39

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){
        }
 0
Author: Faxriddin Abdullayev, 2017-06-16 12:14:36

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.

Tive um problema semelhante, o ficheiro foi escrito, mas nunca o vi. Usei o Explorador de ficheiros do dispositivo e estava lá à minha espera.

Device File Manager

    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;
 -1
Author: Sameh Yassin, 2018-09-01 10:24:20