如何使用 Java 列出 Mac OS 上的受限文件夹?

问题描述 投票:0回答:1

我正在尝试运行此代码片段:

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

据我了解,应用程序应该请求特殊权限才能访问某些文件夹。但要怎么做呢?

如有任何建议,我们将不胜感激。

java bash macos privileges
1个回答
0
投票

要访问 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();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.