8
votes

Quel chemin fait "getApplicationContext (). GetFilesDir ()" Retourner?

Je fais une application simple dans Android et dans une certaine partie de l'application, je voudrais créer un fichier Excel et y écrire. J'ai déjà tout préparé pour utiliser JEXCEL Bibliothèque pour éditer une Excel à l'aide de Java, mais c'est que je ne trouve pas le fichier Excel que j'ai créé. J'ai essayé de le trouver dans mon propre appareil exécutant l'application, mais je ne pouvais pas.

String fileName = "hours.xls";
File file = new File(getApplicationContext().getFilesDir() + fileName);


1 commentaires

Excateusement. Faire ceci (getfilesdir () + nom de fichier) concaténer le nom du dossier final avec le nom du fichier comme celui-ci (en supposant que le nom de fichier = "myfile.xls"): ... / com.mysociety.myapp / fileMyfile.xls au lieu de .. ./files/myfile.xls


5 Réponses :


9
votes

sur Android Kitkat, il renvoie / data / data / {votre nom de package} / fichiers , mais j'imagine que cela pourrait changer en fonction de votre version de plate-forme. Ainsi, si vous essayez simplement de creuser votre système de fichiers et de voir un fichier, il est prudent d'utiliser ce chemin, mais si vous utilisez ce chemin pour certaines fonctionnalités sur plusieurs versions de plate-forme, vous ne devez que le référer à l'aide de getfilesdir () .


2 commentaires

Bien que le chemin que vous avez énuméré a été correct depuis Android 1.0, il n'est que correct pour le compte d'utilisateur principal. Sur les tablettes Android 4.2+ et sur les téléphones Android 5.0+, l'utilisateur principal peut configurer des comptes secondaires. Si l'application est exécutée par l'un de ces comptes, getfilesdir () retourne ... quelque chose d'autre. J'aurais besoin de la connecter pour me souvenir de la structure de chemin exacte.


Ce chemin de répertoire a-t-il changé pour Lollipop, Marshmallow et Nougat?



5
votes

Qu'envoyez-vous d'utiliser ce fichier? Voulez-vous aussi qu'il utilise d'autres applications aussi? Utilisation de gettaplicationContext (). GetFilesDir () vous donnera /data/data/com.package/files mais si vous souhaitez un fichier facilement accessible par vous-même et d'autres applications, Vous ferez mieux d'utiliser quelque chose comme getexternalfilesdir ()


0 commentaires

-1
votes

Lire la documentation, cette méthode lit les fichiers stockés dans le stockage interne créé avec avec OpenFileOutput () :

getfilesdir ()

retourne le chemin absolu sur le répertoire du système de fichiers où Les fichiers créés avec OpenFileOutput (chaîne, int) sont stockés.


0 commentaires

2
votes

Si vous souhaitez accéder à votre fichier via votre PC (avec un câble USB) ou via un gestionnaire de fichiers sur votre appareil, préférez:

new File(getExternalFilesDir(null), fileName);


0 commentaires

0
votes

Ceci a fonctionné:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = getApplicationContext();
        b = (Brain)load("brain.txt");
        if (b == null) {
            b = new Brain();
        }
        vocabulary = (ArrayList <String>) load("vocabulary.txt");
        if (vocabulary == null) {
            vocabulary = new ArrayList <String> ();
            vocabulary.add("I love you.");
            vocabulary.add("Hi!");
        }
        b.setRunning(true);
    }

public Object load(String fileName) {
    File file = new File("/storage/emulated/0/Android/data/com.cobalttechnology.myfirstapplication/files/" + fileName);
    if (!file.exists()) {
        return null;
    }
    try {
        Object o;
        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(fis);
        o = ois.readObject();
        if (o == null) {
            System.out.println(fileName + " = null");
        }
        ois.close();
        fis.close();
        System.out.println("Loaded: " + fileName);
        return o;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
    }
    return null;
}
public void save(Object o, String fileName) {
    File file = new File("/storage/emulated/0/Android/data/com.cobalttechnology.myfirstapplication/files/" + fileName);
    try {
        if (!file.exists()) {
            file.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(o);
        oos.close();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


0 commentaires