我正试图通过将文件从移动应用程序复制到运行在Windows上的服务器应用程序来上传文件。我使用文件选择器让用户选择文件:public void openFile(View view) {
Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select file"), LEARN_TREE);
}
然后我从OnActivityResult的意图获得了uri。这里的第一个问题是为什么它将一个名为“servo.dat”的文件显示为数字(在本例中显示为“5889”)?
之后,我将uri作为一个额外值放入另一个意图中,并使用该意图启动另一个activity。在第二个activity中,我检索URI。现在我想使用FileInputStream从我的文件中读取字节,以便将它们写入从Socket.getOutputStream()创建的ObjectOutputStream。这是不起作用的地方。基本上就是这里提供的路径FileInputStream fis = new FileInputStream(uri.getPath());
是不正确的。如果我在我的设备上检查文件位置是download/servo.dat,应用程序中的Uri显示为download/5889,而我尝试使用网上找到的UriUtils库检索的绝对路径显示为storage/emulated/0/download/servo.dat,但这个文件在我的手机上实际上并不存在。
我认为这并不是很难,但我感到困惑,因为我是新的安卓应用程序开发和安卓本身,请帮助!
我对任何好的解决方案都持开放态度,我在网上看到ContentResolver类应该很有帮助,但我没有设法理解如何使用它: