Android应用程序保存到“模拟”存储而不是实际目录

时间:2016-11-30 21:26:15

标签: android save

我正在尝试将JSON字符串保存到“外部”存储上的文件中。特别是Documents文件夹。这应该是您可以使用文件浏览器,gmail或计算机上的USB访问的存储。

所以我按照文档here提出了这个问题:(注意,现在先改为创建目录,然后附加文件名。现在保存尝试使用MediaScanner)

public static File GetDocumentsPath(String tuningName) {
    // Get the directory for the user's public pictures directory.
    File dir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOWNLOADS).getAbsolutePath());
    if (!dir.mkdirs()) {
        Logy.CallPrint("JSONTuning", "Directory not created");
    }

    File outFile = new File(dir, tuningName);

    return outFile;
}

public static String SaveTuning(Context context, String fileName, String json)
{
    File path;
    if(fileName.contains(".rfts")) {
        path = GetDocumentsPath(fileName);
    } else {
        path = GetDocumentsPath(fileName+".rfts");
    }


    Logy.Print("|||||||||||||||| "+path.getPath());

    try {
        FileOutputStream fileOut = new FileOutputStream(path);
        ObjectOutput strOut = new ObjectOutputStream(fileOut);
        strOut.writeUTF(json);
        strOut.close();
        fileOut.close();

        MediaScannerConnection scanner = new MediaScannerConnection(context, null);
        scanner.connect();
        if(scanner.isConnected())
            scanner.scanFile(path.getPath(), null);
        scanner.disconnect();

        return "Save Successful";
    }
    catch(java.io.IOException e) {
        return e.getMessage();
    }
}

所以我记录了从GetDocumentsPath获取的路径。 该路径为:/ storage_emulated/0/Download/Test.rfts

这不会导致文件保存在Documents中,只要我可以通过文件管理器/计算机访问。 “模仿”这个词的存在使我相信环境根本没有给我实际的路径。

我收到错误“/storage/emulated/0/Documents/Test.rfts:open failed:ENOENT(No such file or directory)”

获取正确路径并保存到外部存储中的文档文件夹需要什么?

作为旁注,我编写文件的方式非常适合内部存储,因为我在使用应用程序设置创建文件时没有任何问题。

1 个答案:

答案 0 :(得分:2)

  

“仿效”这个词的存在使我相信环境并没有给我实际的路径。

是的,是的。

  

我收到错误“/storage/emulated/0/Documents/Test.rfts:open failed:ENOENT(No such file or directory)”

可能性包括:

  • 目录不存在。这是模拟器的典型特征。通常,为了安全起见,请致电mkdirs()创建目录。

  • 您在Android 6.0及更高版本设备上运行,targetSdkVersion为23或更高,而您没有implement runtime permissions

另请注意,您需要add more code to have your file show up in other apps or via a file manager on a desktop/notebook computer