[RESOLVIDO] Como importar/exportar um arquivo da memória interna do celular para a memória externa do sistema do app no Android Studio?

Fiz.

Olha o print:

Mas nesse caso, vc só pegou a referência das pastas até os arquivos que tem nelas, certo?

Como te disse, elas já existe, tanto é que vc as localizou. A questão é a transferência do arquivo pra elas. Provavelmente ele vai substituir o Escola.db que já está lá (Foi ele que eu exportei pra memória externa do celular). Entendi errado?

Vc agora me fez pensar numa coisa, o arquivo a ser recuperado é ARQUIVO_DE_BACKUP, então ele vai pro sistema com esse nome msm, pra ser substituído, ele teria que ter o msm nome, no caso, Escola.db

um passo de cada vez scooby doo, tenta agora:

private void copiarArquivo(Context context) {
    String arquivo_origem = Environment.getExternalStorageDirectory() + "/BACKUP_APP_ESCOLA/ARQUIVO_DE_BACKUP";
    String arquivo_final = context.getApplicationInfo().dataDir + "/databases/Escola.db";
    
    InputStream in = null;
    OutputStream out = null;
    try {
        File dir = new File(arquivo_final);

        in = new FileInputStream(arquivo_origem);
        out = new FileOutputStream(arquivo_final);

        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;

        out.flush();
        out.close();
        out = null;

    } catch (FileNotFoundException e) {
        Log.e("tag", e.getMessage());
    } catch (Exception e) {
        Log.e("tag", e.getMessage());
    }

}

só salvar como Escola.db, mas tanto faz, vc pode mudar o nome do arquivo na hora de salvar!

String arquivo_origem = Environment.getExternalStorageDirectory() + "/Pictures/1586118430294.jpg";
String arquivo_final = context.getApplicationInfo().dataDir + "/databases/Escola.db";

Eu peguei uma img e salve como .db


image

Rodou o try, (mas pq o arquivo ARQUIVO_DE_BACKUP não está lá nas pastas do Device File Explorer?) CERTO!

A questão é que quando vou abrir o app, os dados não estão lá. Os alunos cadastrados não estão na lista.

ele ta sim,

image

aqui no meu deu permission denied, mas é só abrir o android como administrador.

O caminho dele é esse:

I/System.out: PASTA DO APP:::/storage/emulated/0

pergunta besta, mas vc cadastrou alguem antes de trocar de .db?

9 alunos!

orochimaru, a referência tá pra pasta do celular! Olha o print:

São as pastas do meu celular, ou entendi isso errado? kkk meu Deus…

faz um sout quando vc ler os dados do banco pra ver se ta lendo corretamente.

O problema inicial desse tópico foi resolvido?

é isso mesmo, vc quer trocar a pasta?

Eu quero copiar o arquivo que está na memória externa do celular para a pasta do sistema do app, onde está o banco de dados (exportado) Escola.db

é o que estamos fazendo:

Environment.getExternalStorageDirectory() + "/BACKUP_APP_ESCOLA/ARQUIVO_DE_BACKUP"

Se ele foi pra pasta do sistema do app, eu iria ver os alunos cadastrados na lista?

Se sim, pq eles não estão lá?

Será que não está, pq não foi copiado de fato?

faz isso

Desculpa a ignorância, mas oq é um sout?

que isso, eu que expliquei mal

se vc escrever sout e apertar a tecla tab em seguida, ele faz isso: System.out.println();


System.out.println("");

ah… SOP, eu aprendi SOP rssr… Sistem.Out.Println, certo, farei. Tem condições de continuarmos o post amanhã? Eu preciso ir… Pode ser?

ok

Ok, obg! Até amanhã.

1 curtida

Boa tarde! Voltei, orochimaru e a todos que possam ajudar!

Bom, dando continuidade… o Método para IMPORTAÇÃO que vc (orochimaru) me mandou é esse:

public String importarBanco(Context context) {
    String retorno = "null";

    String arquivoOrigem = Environment.getExternalStorageDirectory() + "/BACKUP_APP_ESCOLA/ARQUIVO_DE_BACKUP";
    String arquivoDestino= context.getApplicationInfo().dataDir + "/databases/Escola.db";

    InputStream in = null;
    OutputStream out = null;
    try {
        File dir = new File(arquivoDestino);// SEM USO

        in = new FileInputStream(arquivoOrigem);
        out = new FileOutputStream(arquivoDestino);

        byte[] buffer = new byte[1024];
        int leitor;
        while ((leitor = in.read(buffer)) != -1) {
            out.write(buffer, 0, leitor);
        }
        in.close();
        in = null;// SEM USO

        out.flush();
        out.close();
        out = null;// SEM USO
        return retorno = "UPLOAD REALIZADO COM SUCESSO!";
    }
    catch (FileNotFoundException e) {
        Log.e("tag", e.getMessage());
        return retorno = "UPLOAD NÃO REALIZADO!";
    }
    catch (Exception e) {
        Log.e("tag", e.getMessage());
        return retorno = "UPLOAD NÃO REALIZADO!";
    }
}

Vou falar brevemente da Exportação pra poder falar da IMPORTAÇÃO

O arquivo Exportado (CÓDIGO DA EXPORTAÇÃO AQUI) sempre tinha o meso tamanho independente da quantidade de alunos cadastrados, tipo, com 1 aluno salvo, ele apresentava o tamanho (16,38 KB), mas ao salvar 9 alunos, ele mantém o tamanho (16,38 KB). É como se ele salvasse o arquivo Escola.db , mas sem os dados (O conteúdo do banco). Enfim…

Fiz uns ajustes nele e ele agora tá salvando com o tamanho (20,48 KB), pensei que enfim ele tava salvando os dados, mas não! É o msm esquema, 1 ou 10 alunos ele sempre tem o msm tamanho (20,48 KB). Acredito que isso deveria mudar, pq de 1 pra 10 alunos, aumenta-se a quantidade de dados e seu tamanho também muda, mas ele não muda. (Se for o caso de discutir essa parte da Exportação no outro Tópico, é só falar que eu dou continuidade lá, pois quero saber se ele está de fato Exportando o arquivo com os Dados ou não)

A questão é que o código da IMPORTAÇÃO não está importando os dados do arquivo Escola.db . Ele importa o arquivo, mas sem os dados.

Lembrando que usei o SQLite para fazer o Banco de dados.

Oq está faltando para tal ação?

Grata e no aguardo de respostas.

oi, boa tarde, vc fez o sout quando começa a ler os dados?