phone 的外部存储中未创建文件

File isn't getting created in the phone's external storage

我已经使用此代码在我的 Phone 的外部存储中创建了一个文件。请注意,我已经在我的清单文件中设置了读写权限。

SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
Date now = new Date();
String fileName = formatter.format(now) + ".txt"; //like 20170602.txt

File directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
File file = new File(directory, fileName);

String bodyOfFile = "Body of file!";
FileOutputStream fos = null;
try {
    fos = new FileOutputStream(file);
    fos.write(bodyOfFile.getBytes());
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

我的 LogCat 显示如下。我在该特定位置看不到文件 20170602.txt。在我的 Download 文件夹中,没有任何具有该名称的文件。谁能告诉我哪里出错了。

D/tag: Directory: /storage/emulated/0/Android/data/com.pc.tab/files/Download
D/tag: File: /storage/emulated/0/Android/data/com.pc.tab/files/Download/20170605.txt

更新:

我在 运行 这个应用程序中使用 MOTO G4。我在内部存储中找到了 20170602.txt 文件。

File Manager --> `LOCAL` tab ( Upper right ) --> Internal Storage --> Android --> data --> com.pc.tab --> files --> Download --> 20170602.txt

将目录和文件本身分开很重要

File directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
File file = new File(directory, fileName);

在您的代码中,您对要写入的文件调用了 mkdirs,这是一个错误,因为 mkdirs 使您的文件成为一个目录。您应该仅为该目录调用 mkdirs,以便在它不存在时创建它,并且当您为此文件创建新的 FileOutputStream 对象时将自动创建该文件。

您的代码应如下所示:

SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
Date now = new Date();
String fileName = formatter.format(now) + ".txt"; //like 20170602.txt

File directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
File file = new File(directory, fileName);

String bodyOfFile = "Body of file!";
FileOutputStream fos = null;
try {
    fos = new FileOutputStream(file);
    fos.write(bodyOfFile.getBytes());
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}