我对这个问题有两个部分:1)什么是我需要的最佳解决方案,以及2)我该怎么做?
1)我有一个客户端应用程序,它将捆绑包发送到服务应用程序。捆绑包可以打破捆绑包大小的限制,所以我需要写出实际的请求并在服务端读取它。因此,我无法写入我的私人内部存储空间。我大量使用这些页面,但没有运气:http://developer.android.com/guide/topics/data/data-storage.html http://developer.android.com/training/basics/data-storage/files.html
我目前的理解是,我最好的办法就是用它来获得一个公共目录:
File innerDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
然后我添加我的文件名:
String fileName = String.valueOf(request.timestamp + "_avoidRoute"+count+++".ggr");
将这两个结果合并到完整的文件路径中:
/storage/emulated/0/Download/GroundGuidance/Route/1425579692169_avoidRoute1.ggr
我像这样写入磁盘:
fos = context.openFileOutput(fullPath, Context.MODE_WORLD_WRITEABLE);
fos.write(routeString.getBytes());
fos.close();
当我尝试将其写入磁盘时,我收到错误
java.lang.IllegalArgumentException: File /storage/emulated/0/Download/GroundGuidance/Route/1425579692169_avoidRoute1.ggr contains a path separator
当然它确实 - 我需要它有一条路径。我在网上搜索了这个错误的解决方案,告诉我FileOutputStream
写一个完整的路径。我做了,但是虽然我的应用程序没有错误并且似乎创建了文件,但我也无法在Windows资源管理器中查看它,导致我相信它正在创建具有私有权限的文件。所以这带我到我的帖子和两个问题:
1)我应该尝试采用不同的方法在客户端和服务应用程序之间共享大量数据吗?
2)如果没有,我错过了什么?
感谢所有人阅读并试图提供帮助!
答案 0 :(得分:1)
将这两个结果合并到完整的文件路径中:
/storage/emulated/0/Download/GroundGuidance/Route/1425579692169_avoidRoute1.ggr
我像这样写入磁盘:
fos = context.openFileOutput(fullPath,Context.MODE_WORLD_WRITEABLE);
这不适合使用Context openFileOutput()
方法,因为它不采用完整路径,而是采用应用程序私有存储区域内的文件名。
如果您要自己开发完整路径,请使用
fos = new FileOutputStream(fullPath)
共享权限设置不适用于外部存储,但您需要一个清单权限才能在您的创建者上写入(并隐式阅读),以及用于阅读您的消费者的权限。
或者,您可以使用带有文件名和Context.MODE_WORLD_WRITEABLE的私有存储(尽管被弃用作为建议)而不是构建完整路径,并将结果的绝对路径传递给另一个用于{ {1}}。
或者您可以使用任何其他数据交换方法 - 内容提供程序,本地套接字等。