web-dev-qa-db-fra.com

enregistrement du fichier dans le stockage interne android

je suis nouveau sur Android et j'ai un problème lorsque j'essaie d'enregistrer un fichier dans la mémoire interne, le nouvel exemple fonctionne sur mon SDK, mais ne fonctionne pas sur mon téléphone.

J'essaie d'exécuter de l'exemple dans un Sony Ericsson xperia, avec Android 2.1 d'ailleurs ... le log.i - me donne la ligne suivante:

/data/data/com.example.key/files/text/(my_title) 

Merci.

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            setContentView(R.layout.new_text);

            file = (EditText) findViewById(R.id.title_new);
            entry = (EditText) findViewById(R.id.entry_new);

            btn = (Button) findViewById(R.id.save_new);
            btn.setOnClickListener( new OnClickListener() {

                @Override
                public void onClick(View v) {

                    File myDir = getFilesDir();


                    NEWFILENAME = file.getText().toString();
                    if (NEWFILENAME.contentEquals("")){
                        NEWFILENAME = "UNTITLED";
                    }
                    NEWENTRY = entry.getText().toString();

                    try {

                        File file_new = new File(myDir+"/text/", NEWFILENAME);
                        file_new.createNewFile();

                        Log.i("file", file_new.toString());

                        if (file_new.mkdirs()) {
                            FileOutputStream fos = new FileOutputStream(file_new);

                            fos.write(NEWENTRY.getBytes());
                            fos.flush();
                            fos.close();
                        }

                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    Intent textPass = new Intent("com.example.TEXTMENU");
                    startActivity(textPass);
                }
            });

            }


 //That's for creating... then in other activity i'm reading

            @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.text_menu);

            btn = (Button) findViewById(R.id.newNote);
            listfinal = (ListView) findViewById(R.id.listView);

            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent textPass = new Intent("com.example.TEXTNEW");
                    startActivity(textPass);

                }
            });

            listfinal.setOnItemClickListener(this);

            File fileWithinMyDir = getApplicationContext().getFilesDir();


            loadbtn = (Button) findViewById(R.id.loadList);

            loadbtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    File myDir = getFilesDir();

                    File dir = new File(myDir + "/text/");

                    String[] files = dir.list();

                    //String[] files = getApplicationContext().fileList();
                    List<String> list = new ArrayList<String>();

                    for (int i =0; i < files.length; i++){
                        list.add(files[i]);
                    }
                    ArrayAdapter<String> ad = new ArrayAdapter<String>(TextMenu.this,  Android.R.layout.simple_list_item_1,
                                    Android.R.id.text1, list);

                    listfinal.setAdapter(ad);
                }
            });
            }

dans mon Android manifiest j'ai les autorisations

              <uses-sdk
                    Android:minSdkVersion="5"
                    Android:targetSdkVersion="15" />

                <uses-permission Android:name="Android.hardware.camera" />
                <uses-permission Android:name="Android.permission.INTERNET" />
                <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
                <uses-permission Android:name="Android.permission.WRITE_INTERNAL_STORAGE" />
16
Fede

Je ne sais pas trop à quel exemple vous faites référence, mais j'ai ici deux exemples de travail dont au moins un devrait répondre à vos besoins. Je les ai testés sur un X10 exécutant le numéro de build 2.1.A.0.435, un Xperia T exécutant le numéro de build 7.0.A.1.303 et un Nexus S exécutant le numéro de build JZO54K

Exemple 1

    String filename = "myfile";
    String outputString = "Hello world!";

    try {
        FileOutputStream outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
        outputStream.write(outputString.getBytes());
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        FileInputStream inputStream = openFileInput(filename);
        BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder total = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
            total.append(line);
        }
        r.close();
        inputStream.close();
        Log.d("File", "File contents: " + total);
    } catch (Exception e) {
        e.printStackTrace();
    }

Exemple 2

    String filename = "mysecondfile";
    String outputString = "Hello world!";
    File myDir = getFilesDir();

    try {
        File secondFile = new File(myDir + "/text/", filename);
        if (secondFile.getParentFile().mkdirs()) {
            secondFile.createNewFile();
            FileOutputStream fos = new FileOutputStream(secondFile);

            fos.write(outputString.getBytes());
            fos.flush();
            fos.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        File secondInputFile = new File(myDir + "/text/", filename);
        InputStream secondInputStream = new BufferedInputStream(new FileInputStream(secondInputFile));
        BufferedReader r = new BufferedReader(new InputStreamReader(secondInputStream));
        StringBuilder total = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
            total.append(line);
        }
        r.close();
        secondInputStream.close();
        Log.d("File", "File contents: " + total);
    } catch (Exception e) {
        e.printStackTrace();
    }
30
shellström

J'ai eu un problème "Autorisation refusée" avec Samsung Galaxy S7 même si j'avais donné des autorisations de lecture et d'écriture dans le fichier manifeste. Je l'ai résolu en accédant aux paramètres du téléphone >> application >> [mon application] et j'ai autorisé "Stockage" sous autorisation. A bien fonctionné après cela.

1
Ramin Fallahzadeh