java - 相当于 Windows %PROGRAMDATA% 环境变量的 OSX/MacOS
问题描述
我希望我的应用程序将一些数据(例如配置、缓存、许可证等)写入一个共享的、所有用户都可以访问的位置。
在 Windows 上,我已经这样做了%PROGRAMDATA%
。
在 MacOS 上,我的研究建议使用该Library/Application Support
目录。
虽然用户特定的~/Library/Application Support
作品,非用户特定的/Library/Application Support
似乎不可写访问?
例子:
Files.writeString(Paths.get("/Library/Application Support/myfile.txt"), "hello world")
抛出异常:
java.nio.file.AccessDeniedException: /Library/Application Support/myfile.txt
这种数据有更好的目的地吗?
解决方案
没有真正的 macOS 等价物。存储此类内容的最佳位置可能是 /Users/Shared(请参阅Apple 开发者论坛上的此线程),但它也不是完全理想的。
需要注意的一件事是权限:/Users/Shared 设置了“粘性”位,这意味着用户不能删除(或重命名)他们不拥有的文件。您可能希望为您的应用程序文件创建一个子目录,以便您可以通过它控制对文件的访问。您还必须注意文件权限,因为默认情况下所有者(创建文件或文件夹的用户)拥有完全访问权限,而其他所有人都是只读的。您可能想做一些事情,例如将组设置为“员工”并授予组和所有者的写访问权限。
另一个结果是:计算机上的每个人(以及几乎所有东西)都可以写访问权,并且可以制造任何他们想要的混乱。访问权限不限于您的应用程序(尽管沙盒应用程序通常无权访问)。请参阅开发线程中的 Quinn“爱斯基摩人!”的警告。
推荐阅读
- java - 在不同光照条件下检测车牌
- oracle - SQL* Loader 映射不同表列中的 DataFile 字段
- r - 计算 R 函数的最大内存需求
- mysql - 数据库中结果的分页如何工作?
- r - 在 R 中执行 SQL Server 存储过程但未获取 CSV 文件
- amazon-s3 - URL.createObjectURL(mediaSource) - 从 URL 播放视频 - MOOV atom - Elastic Transcoder
- android - 如何使两个 ListView 一起/一起上下滚动?
- d3.js - Beeswarm plot with force - 添加到节点的链接
- javascript - 如何使用 numeric.js 获得 1M 而不是 1m?
- r - 如何判断 R 中此逻辑回归输出的优势比分子中使用了哪个概率?