我有一个服务器客户端程序,服务器运行在Raspberry Pi(运行Linux)上,客户端是Android应用程序。我正在编写一个应用程序文件浏览器,它只是向服务器发送路径,然后服务器使用file.listFiles()
(服务器用Java编写)返回文件列表。File.canRead()返回false
我运行的服务器/ Java程序为sudo
,希望这将允许跨系统访问所有文件,但令我惊讶的是,该用户没有对/home
目录的读取权限。
因此,这里是按顺序会发生什么:
我要求file.listFiles(new File("/"));
被发送超过插座从曹丕Android应用程序。在应用程序中,在发出下一个请求之前,我检查是否可以使用file.canRead();
和/home
目录读取文件,这会返回false。在皮
文件权限:
[email protected] ~ $ ls -l/| grep home
drwxr-xr-x 3 root root 4096 Dec 31 1969 home
我如何运行我的Java服务器:
[email protected] ~ $ sudo java -cp "/usr/local/lib/bluecovelib/bluecove/target/bluecove-2.1.1-SNAPSHOT.jar:/usr/local/lib/bluecovelib/bluecove-gpl-2.1.1-SNAPSHOT/target/bluecove-gpl-2.1.1-SNAPSHOT.jar:/home/pi/severinteractionutils.jar:." AppConnect
为什么sudo
用户没有从Java程序访问/home
目录?
编辑:
我跑皮一个简单的程序来测试它是否是因为底层的操作系统已经改变。显然它确实有效。
public class TestFileBrowser {
public static void main(String[] args) {
System.out.println("Hello, World");
File file = new File("/");
File [] files = file.listFiles();
for(int i=0; i<files.length; ++i) {
if(files[i].getAbsolutePath().equals("/home")) {
File homeDir = files[i];
if(homeDir.canRead()) {
System.out.println("Can Read");
if (homeDir.isDirectory()) {
System.out.println("Is directory");
}
}
}
}
}
}
,这里是控制台快照:
[email protected] ~ $ sudo javac TestFileBrowser.java
[email protected] ~ $ sudo java TestFileBrowser
Hello, World
Can Read
Is directory
那么,在这种情况下,我怎样才能得到'/ home'目录的内容。基本上,如何获得一个功能性的远程文件浏览器。另外,'file.isDirectory()'为我返回false。 –
然后你不能得到的内容,因为它不是一个目录。尝试像'新的文件(System.getProperty(“user.home”))。listFiles();' –
我试过了,但因为我运行程序作为sudo(这是由于程序中的其他事情需要)它返回'/ root'作为主目录,这是没有用的。另请参阅'ls -l/|的内容有问题的grep home“,其中指出它是一个目录 –