Search code examples
javaandroiddirectorysubdirectory

Sub Directories under getCacheDir()


I'm trying to create sub directories in my apps cache folder but when trying to retrieve the files I'm getting nothing. I have some code below on how I created the sub directory and how I'm reading from it, maybe I'm just doing something wrong (well clearly I am lol) or maybe this isn't possible? (though I haven't seen anywhere that you can't). thank you all for any help!

creating the sub dir

File file = new File(getApplicationContext().getCacheDir(), "SubDir");
                        File file2 = new File(file, each_filename);
                        Toast.makeText(getApplicationContext(), file2.toString(), Toast.LENGTH_SHORT).show();

                        stream = new FileOutputStream(file2);
                        stream.write(bytes);

reading from it

File file = new File(context.getCacheDir(), "SubDir");
    File newFile = new File(file, filename);

    Note note;

    if (newFile.exists()) {
        FileInputStream fis;
        ObjectInputStream ois;

        try {
            fis = new FileInputStream(new File(file, filename));
            ois = new ObjectInputStream(fis);

            note = (Note) ois.readObject();

            fis.close();
            ois.close();

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }

        return note;
    }

I've also tried with this and nothing

String file = context.getCacheDir() + File.separator + "SubDir";

Solution

  • I don't see anywhere in the code you posted where you actually create the sub-directory. Here's some example code to save a file in a sub-directory, by calling mkdirs if the path doesn't yet exist (some parts here need to be wrapped in an appropriate try-catch for an IOException, but this should get you started).

    File cachePath = new File(context.getCacheDir(), "SubDir");
    String filename = "test.jpeg";
    boolean errs = false;
    
    if( !cachePath.exists() ) {
        // mkdir would work here too if your path is 1-deep or
        // you know all the parent directories will always exist
        errs = !cachePath.mkdirs();
    }
    
    if(!errs) {
        FileOutputStream fout = new FileOutputStream(cachePath + "/" + filename);
        fout.write(bytes.toByteArray());
        fout.flush();
        fout.close();
    }