我正在尝试运行此代码片段:
import org.apache.commons.io.IOUtils;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
var home = System.getProperty("user.home");
var location = home + "/Library/Application Support/MobileSync/Backup";
var pb = new ProcessBuilder("ls", "-al", location);
var p = pb.start();
System.out.println(p.waitFor());
IOUtils.copy(p.getInputStream(), System.out);
IOUtils.copy(p.getErrorStream(), System.err);
}
}
它应该列出存储 iPhone 备份的文件夹。我得到以下输出:
1 # exit code
total 0
ls: /Users/zjor/Library/Application Support/MobileSync/Backup: Operation not permitted
但是,如果我在同一用户下的终端中运行以下命令,效果很好:
ls -al "/Users/zjor/Library/Application Support/MobileSync/Backup"
total 0
drwxr-xr-x 3 zjor staff 96 Oct 23 15:01 .
drwxr-xr-x 3 zjor staff 96 Jan 17 2023 ..
drwxr-xr-x@ 262 zjor staff 8384 Oct 23 14:55 00003101-123456780CC3XXXX
据我了解,应用程序应该请求特殊权限才能访问某些文件夹。但要怎么做呢?
如有任何建议,我们将不胜感激。
要访问 Mac OS 上的受限制文件夹,您还可以使用
Files
包中的 java.nio.file
类,并且可以使用 Files.list()
方法列出指定目录的内容,因此如果目录受限制,它将扔一个IOException
!
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) throws IOException {
var home = System.getProperty("user.home");
var location = home + "/Library/Application Support/MobileSync/Backup";
var path = Paths.get(location);
try {
Files.list(path)
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}