diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index b8850680be1a1ef8f5d4082fe70f44555d722a7e..2d50a6f4649cf185560d23a83bbdcfb2a940c2dd 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -23,6 +23,7 @@ import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.Uri;
 import android.text.TextUtils;
+import android.util.Log;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -40,6 +41,8 @@ import java.util.Locale;
  * file from the dictionary provider
  */
 public class BinaryDictionaryFileDumper {
+    private static final String TAG = BinaryDictionaryFileDumper.class.getSimpleName();
+
     /**
      * The size of the temporary buffer to copy files.
      */
@@ -79,8 +82,16 @@ public class BinaryDictionaryFileDumper {
      * Find out the cache directory associated with a specific locale.
      */
     private static String getCacheDirectoryForLocale(Locale locale, Context context) {
-        final String directoryName = replaceFileNameDangerousCharacters(locale.toString());
-        return context.getFilesDir() + File.separator + directoryName;
+        final String relativeDirectoryName = replaceFileNameDangerousCharacters(locale.toString());
+        final String absoluteDirectoryName = context.getFilesDir() + File.separator
+                + relativeDirectoryName;
+        final File directory = new File(absoluteDirectoryName);
+        if (!directory.exists()) {
+            if (!directory.mkdirs()) {
+                Log.e(TAG, "Could not create the directory for locale" + locale);
+            }
+        }
+        return absoluteDirectoryName;
     }
 
     /**