sigillum_conf
sigillum_conf

Reputation: 433

Creating a new directory inside Android internal memory and writing data to it

Most of the examples I have seen deal with external memory or show how to create a new directory inside internal memory but not how to write to it, I tried implementing my own code into it but can't seem to find the created file even though the directory has been created, here is the code that I have been trying to use:

public void fileCreate(Context context, String fileDir) throws Exception{

        File myNewDir = context.getDir(fileDir, Context.MODE_PRIVATE);
        if (!myNewDir.exists()){
            myNewDir.mkdirs();


            File testContnet = new File(myNewDir + "/hello_file.txt");
            String hello = "Hello world";
            FileOutputStream fos = openFileOutput(testContnet.toString(), Context.MODE_PRIVATE);
            fos.write(hello.getBytes());
            fos.close();

        }

    }

Now, when I call this function I use:

try {
      fileCreate(this, "testerDirectory");
     }catch(Exception e) {
       e.printStackTrace();
 }

With no results. It is just for a small experiment I am doing so it is nothing too serious, but I still want to know about the proper way of creating a directory(in this case one called testerDirectory, and saving the file to it, I believe that my code is wrong but I do not have much experience with this to know exactly where to go. The Android documentation did show me how to create and save files although in this case I am trying to merge that example with that of creating a new directory and saving a file to it. Any help/pointers would be greatly appreciated.

I know also that the file is not being written accordingly upon inspecting the contents of the directory by using the adb shell.

Upvotes: 0

Views: 30

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006644

You are only writing a file to the directory if the directory does not already exist.

Move your work with testContnet to be outside of the if block:

public void fileCreate(Context context, String fileDir) throws Exception{

    File myNewDir = context.getDir(fileDir, Context.MODE_PRIVATE);
    if (!myNewDir.exists()){
        myNewDir.mkdirs();
    }


    File testContnet = new File(myNewDir, "hello_file.txt");
    String hello = "Hello world";
    FileOutputStream fos = new FileOutputstream(testContnet);
    fos.write(hello.getBytes());
    fos.flush();
    fos.getFD().sync();
    fos.close();
}

This way, you create the directory if it does not exist, but then create the file in either case. I also added fos.flush() and fos.getFD().sync(), to ensure all bytes get written to disk before you continue.

UPDATE: You were using openFileOutput(), which does not write to your desired directory. Moreover, it is unnecessary. Just create a FileOutputStream on your File.

Upvotes: 1

Related Questions