16

i want to save a file on my Android 4.1.2 smartphone in the documents directory.

This code snippet:

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),"test.txt");

throws this exception:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NoSuchFieldError: android.os.Environment.DIRECTORY_DOCUMENTS

While this one is working:

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"test.txt"); 

But i want to save my file in my documents directory, not in downloads. Ive read DIRECTORY_DOCUMENTS is only available in Android 4.4 and higher. But there is also a documents direcotry on my smartphone. So, is there no solution to save it in documents?

Thx for answers

Pebbles

pebbles
  • 356
  • 1
  • 3
  • 19

2 Answers2

20

You are not able to access DIRECTORY_DOCUMENTS becuase it is not there in Android 4.1.2. Which means, though there is a Documents directory in your external storage, it is not pointed to by DIRECTORY_DOCUMENTS (since it is non-existent). To solve this, you have to create the directory if it is not present and get the path to that folder manually.

File docsFolder = new File(Environment.getExternalStorageDirectory() + "/Documents");
boolean isPresent = true;
if (!docsFolder.exists()) {
    isPresent = docsFolder.mkdir();
}
if (isPresent) {
    File file = new File(docsFolder.getAbsolutePath(),"test.txt"); 
} else {
    // Failure
}
eraxillan
  • 1,552
  • 1
  • 19
  • 40
Arjun
  • 456
  • 5
  • 6
  • 1
    DIRECTORY_DOWNLOADS does not exist on my Android 6 (ASUS Nexus 7) and can not be created via mkdir() even with WRITE_EXTERNAL_STORAGE in the manifest – Jaroslav Záruba Mar 29 '17 at 14:42
  • Environment.getExternalStorageDirectory() gives a File back. I guess you need to add getAbsolutePath() to get a String. Concatenating "/Documents" should do the trick. – tm1701 Jan 29 '19 at 16:47
8

The folder is present in older Versions (from Api 1) of Android but the field DIRECTORY_DOCUMENTS is available first in Version 4.4 (Api 19 - Kitkat).

Solution for me was to use Environment.getExternalStorageDirectory() + "/Documents" instead DIRECTORY_DOCUMENTS for older Android Versions.

Lucas Teixeira
  • 704
  • 8
  • 11
iwanlenin
  • 210
  • 4
  • 11