I want to download a text file from a web url and save it locally on the device and use it in my app.

**Code:**

```
try {
    File file = new File(getFilesDir(), "file.txt");
    if (file.length() > 0) {
        //File already exists and it is not empty
        return;
    }
    URL url = new URL("https://www.abc.com/file.txt");
    FileOutputStream fos = new FileOutputStream(file);
    InputStream in = url.openStream();
    byte[] buffer = new byte[1024];
    int length = 0;
    while ((length = in.read(buffer)) > 0) {
        fos.write(buffer, 0, length);
    }
    fos.flush();
    fos.close();
} catch (Exception e) {
    // TODO: 
}

```

As you can see, the code goes with `getFilesDir()` assuming that always exists. However there are few questions, with proper network connection and permissions:

1. Does my assumption of `getFilesDir()` fail in any case?
2. Are there any cases of either file not downloaded/wrong content etc.., with this code?
3. Once I faced an issue where the file is downloaded but has all encoded characters, no matter how may times I downloaded it, it still had the same encoded text. Only when I re-installer my app, then the proper text was downloaded. And never got that issue ever since. Any reason for that weird behavior?

**EDIT:**
Here is what I get as the content when I try to read the file which I downloaded(happens sometimes, 1 in 10) shown in the logcat:

![enter image description here](https://i.stack.imgur.com/smoSV.png)

**Code to read the file:**

```
BufferedReader inputReader= = new BufferedReader(
        new InputStreamReader(new FileInputStream(file)));
String inputString;
StringBuffer stringBuffer = new StringBuffer();
while ((inputString = inputReader.readLine()) != null) {
    Log.e("inputString: ", inputString);
}
inputReader.close();

```

Thank You