用Java在Mac应用程序包/文件夹中编写

用Java在Mac应用程序包/文件夹中编写,java,macos,file,location,Java,Macos,File,Location,好的,在问这个问题之前我已经考虑过了,因为一开始它听起来确实像一个古老的问题,可以归结为“是否可以在档案中写作”。我不熟悉Mac OS X,但我读到应用程序只是一个扩展名为.app的文件夹和一个特定的文件结构。所以,我想知道是否有可能写在这个文件夹内,如果有,如何 我问这个问题的原因是,在我的Java程序中,在windows上,它读取程序目录中的一些文件(程序文件的原理),但在OSX上,应用程序似乎没有创建任何文件(这很明显),所以我猜它们必须将其存储在.app文件夹中!如果我想错了,我想知道应

好的,在问这个问题之前我已经考虑过了,因为一开始它听起来确实像一个古老的问题,可以归结为“是否可以在档案中写作”。我不熟悉Mac OS X,但我读到应用程序只是一个扩展名为
.app
的文件夹和一个特定的文件结构。所以,我想知道是否有可能写在这个文件夹内,如果有,如何

我问这个问题的原因是,在我的Java程序中,在windows上,它读取程序目录中的一些文件(程序文件的原理),但在OSX上,应用程序似乎没有创建任何文件(这很明显),所以我猜它们必须将其存储在
.app
文件夹中!如果我想错了,我想知道应用程序通常在哪里存储它们创建的文件

提前谢谢


编辑我问这个问题的全部原因是因为我担心如果我的应用程序留下文件,会有负面反馈,所以我真的需要信息丰富的意见。简而言之,我的应用程序需要一个配置文件,但它也允许用户创建自己的“数据库”。我现在认为我会将这些文件存储在用户的文档文件夹中,但我不确定是否应该在删除应用程序时删除这些文件,还是将其保留。显然,删除它们需要我制作一个包——这对用户来说只是一个额外的步骤,那么你认为呢?。。。哦,是的,当用户输入有效的串行密钥时,应用程序会生成一个许可证文件——在Windows上,信息存储在注册表中,但在Mac上,我不确定将包含此信息的文件放在哪里!非常感谢您的帮助。

我正在自己寻找这个问题的答案,但我想我可以帮助您解决您的问题。我自己移植了一个“windows”java应用程序。我不是真正的Mac专家,但我在这方面的研究给了我以下答案:

我理解*.app文件夹是您程序的安装包。此文件夹的内部内容不会显示给用户。对他来说,这只是一个应用程序。 谷歌快速搜索给了我以下提示:


也许这会有帮助,你不应该写应用包。有些原因没有特别的顺序:

  • 用户可能没有写入权限。事实上,应用程序包可以在只读媒体上

  • 应用程序包不是特定于用户的。它可能位于共享位置,并由系统上的所有用户使用

  • 应用程序应该进行代码签名,修改其内部可能会使签名无效

放置用户数据的适当位置可以是用户的文档文件夹、~/Library/Application-Support的特定于产品的子目录(如果应该是系统范围的,/Library/Application-Support),也可以是用户选择的位置


如果用户删除应用程序,我不会太担心留下文件。这是相当普遍的,甚至是令人向往的。例如,如果在安装新版本之前删除旧版本,我希望新版本能够找到旧版本遗留下来的现有文件。如果您遵循典型的惯例,用户将知道如何清理(或者像AppZapper这样的东西可以帮他们清理)。

谢谢您的回答。事实上,我自己也找到了前一个链接,我还找到了以下有点帮助的链接:。我收集的信息是,由于各种原因(包括权限),不建议在应用程序中存储任何此类文件,而通常使用Preferences API。不过,就我所见,作为对你关于
.app
文件夹的评论的回应,拥有足够权限的用户可以通过单击“显示软件包内容”来浏览内容……无论如何,我问这个问题的原因是因为我在与一把双刃剑作斗争。我并不热衷于为我的Mac应用程序创建一个“安装程序”,但同时,如果我的软件在首选项中留下文件,我担心会有负面反馈。我不知道现在该怎么办。你觉得怎么样?再次感谢你的回答。我真的很感激你,而且我投了你更高的票。然而,我认为更完整和信息量更大的答案是被接受的(显然)-抱歉。我希望你在将来将windows移植到mac时好运。非常感谢你的回答——这正是我所需要的。我曾读到,由于权限的原因,您不应该写入
.app
文件夹,但其他几点很有用!我决定将配置和许可证文件存储在
~/Library/Application Support
中,并让管理员决定在何处存储数据库。不过,谢谢你让我放心把文件留下来,我在Mac上读到过,这其实并不重要(在这种情况下),但不知怎么的,这似乎并不正确!