Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android上使用文件描述符获取文件路径?_Java_Android_File_File Descriptor - Fatal编程技术网

Java 如何在Android上使用文件描述符获取文件路径?

Java 如何在Android上使用文件描述符获取文件路径?,java,android,file,file-descriptor,Java,Android,File,File Descriptor,我需要使用返回的文件描述符获取文件绝对路径。 我该怎么做呢?在Linux内核下运行的系统上,这将是所有当前的Android实现,每个文件描述符都将在/proc/[processid]/fd中有一个条目,它是指向文件描述符目标的符号链接-不仅针对常规文件,但也适用于许多其他可能的目标,如管道和插座 下面是一个在android设备上运行的cat>/mnt/sdcard/foo进程的部分示例 $ ls -l /proc/3528/fd lrwx------ shell shell

我需要使用返回的文件描述符获取文件绝对路径。
我该怎么做呢?

在Linux内核下运行的系统上,这将是所有当前的Android实现,每个文件描述符都将在
/proc/[processid]/fd
中有一个条目,它是指向文件描述符目标的符号链接-不仅针对常规文件,但也适用于许多其他可能的目标,如管道和插座

下面是一个在android设备上运行的
cat>/mnt/sdcard/foo
进程的部分示例

$ ls -l /proc/3528/fd
lrwx------ shell    shell             2013-06-06 10:31 0 -> /dev/pts/1
l-wx------ shell    shell             2013-06-06 10:31 1 -> /mnt/sdcard/foo
lrwx------ shell    shell             2013-06-06 10:31 2 -> /dev/pts/1
lrwx------ shell    shell             2013-06-06 10:31 6 -> socket:[188850]
阅读Java中的符号链接“留给读者作为练习”


在桌面linux上,有一个
lsof
工具,它可以遍历所有进程的这些目录,并转储一个打开的文件列表——但是,这在Android上不会太有用,因为每个应用程序的用户ID的使用会限制这种遍历。但是,您仍然可以查找属于应用程序本身的fd,或在同一用户ID下运行的任何其他进程。

调查这些USB设备文件的好主意!如果您构建了一个调试apk,您可以使用adb shell“run as your.package.name”来获取一个shell作为应用程序的用户ID,然后在应用程序运行时,在应用程序进程的/proc条目上使用该shell中的ls-l来检查fd链接,而不必从java中找出如何执行此操作。Chris,您能否详细解释一下,我还试图从java代码中获取USB OTG路径,但我无法确定它的实际路径,因为谷歌对可移动设备有很多限制。