我正在尝试将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)”
获取正确路径并保存到外部存储中的文档文件夹需要什么?
作为旁注,我编写文件的方式非常适合内部存储,因为我在使用应用程序设置创建文件时没有任何问题。
答案 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。