What path does “getApplicationContext().getFilesDir()” return?

后端 未结 5 1680
余生分开走
余生分开走 2020-12-17 23:07

I\'m doing a simple app in Android and in a certain part of the app I would like to create an Excel file and write in it. I\'ve already prepared everything to use jexcel lib

相关标签:
5条回答
  • 2020-12-17 23:31

    If you want to access your file via your PC (with an usb cable) or via a file manager on your device, prefer:

    new File(getExternalFilesDir(null), fileName);
    

    This folder is created in .../Android/data/ ... com.yoursociety.yourapp/files ...

    null means that you do not want to store files in predefined folders like Movies, Pictures and so on.

    (See documentation for more info)

    0 讨论(0)
  • 2020-12-17 23:33

    This worked:

    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 讨论(0)
  • 2020-12-17 23:37

    Read the documentation, this method reads the files stored in the internal storage that were created with with openFileOutput():

    getFilesDir()

    Returns the absolute path to the directory on the filesystem where files created with openFileOutput(String, int) are stored.

    0 讨论(0)
  • 2020-12-17 23:43

    On Android KitKat, it returns /data/data/{your package name}/files, however I imagine this could change depending on your platform version. Thus if you're just trying to dig through your filesystem and see a file, it's safe to use this path, but if you're using this path for some functionality across multiple platform versions, you should only reference it using getFilesDir().

    0 讨论(0)
  • 2020-12-17 23:43

    What are you planning on using this file for? Do you want it usable by other apps too? Using getApplicationContext().getFilesDir() will give you /data/data/com.package/files but if you want a file that's easily accessible by yourself and other apps, you're better off using something like getExternalFilesDir()

    0 讨论(0)
提交回复
热议问题