RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 886863
Accepted
Боков Глеб
Боков Глеб
Asked:2020-09-29 10:55:39 +0000 UTC2020-09-29 10:55:39 +0000 UTC 2020-09-29 10:55:39 +0000 UTC

技术上正确的 Java 应用程序中用户文件的跨平台存储

  • 772

如您所知,在 Windows 中,大多数应用程序的用户文件都存储在 AppData/Roaming 中。我对 MacOS 和 Linux 几乎没有经验,但我认为有类似的文件夹。

这不仅适用于 Java 应用程序开发,而且我相信一旦我们启动应用程序,它应该做的第一件事是检查 AppData/Roaming 是否存在其子文件夹,如果没有,则创建它。

问题是:有什么比下面的算法更好的吗?

  1. 学习操作系统
  2. 根据操作系统,我们使用用户设置获取文件夹的路径(在 Windows 的情况下为 AppData / Roaming)
  3. 我们检查子文件夹是否特定于我们正在开发的应用程序。如果有,我们检查是否有访问权限。如果没有,我们创建。
  4. 使用子文件夹文件。

也许Spring有一些合适的库?

java
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    user236980
    2020-10-07T07:30:31Z2020-10-07T07:30:31Z

    在我的例子中,应用程序写入一个子文件夹Tomcat aplication server,因为它是一个。该算法与您的相似。

    private static final String NIX_ROOT_FOLDER = "/opt/tomcat";
    private static final String WIN_ROOT_FOLDER = "C:\\Users\\%username%\\AppData\\Roaming\\tomcat";
    private static final String OS_NAME = System.getProperty("os.name").toLowerCase();
    
    public static final String ROOT_FOLDER = OS_NAME.contains("win") ? WIN_ROOT_FOLDER : NIX_ROOT_FOLDER;
    

    我看不出这个算法有什么问题。

    通常,写入以下文件夹之一是有意义的:

    • 到应用程序文件夹(仅在重新部署之前)
    • 到用户文件夹
    • 到应用程序服务器文件夹

    如果您计划在其他应用程序中进一步处理这些文件,则:

    • 到本地机器上的专用文件夹
    • 到网络文件夹

    Spring,据我所知,它只提供了用于处理文件的标准 Java 算法的包装器。

    • 5
  2. Stranger in the Q
    2020-10-06T16:29:43Z2020-10-06T16:29:43Z

    让我告诉你我的困难案例......

    我真诚地希望你永远不需要这个。

    根据工作的具体情况,您必须处理 WSVS 5(武装部队的移动系统),这是一个 2.6 内核上的 RedHat linux,除其他外,它实现了强制访问控制。

    因此,在这样的环境下,允许应用程序写入文件的目录分别由启动进程的用户名和当前访问级别(特殊重要性/sov.secret/secret/not secret)决定,它看起来像这样:

    /home/%username%/.tmp/0-0/ не секретно 
    /home/%username%/.tmp/1-0/ секретно
    /home/%username%/.tmp/2-0/ сов. секретно
    /home/%username%/.tmp/3-0/ особой важности
    

    在这种情况下,应用程序不会在除用户文件夹之外的任何地方写入被认为是一种好的做法,但这是可能的。

    而要想在Java中获取访问级别,当然是没有办法的,这里有JNI或者JNA或者Runtime.exec(),需要用它找出进程的秘密标签

    回答你的问题:事实上,这是你的算法,只有珍珠母按钮......

    ADD:由于 topicstarter 接受了一个可能误导人们的答案,我将其添加到我的答案中

    通常,Web 应用程序不应写入 servlet 容器拥有的文件夹。首先,在扩展到多个容器时很难维护,其次,这样会影响这个容器中其他应用程序的完整性。第三,通过正确的软件安装组织,Tomcat 是一个包,而您的应用程序是另一个包,使用您的脚本创建正确的安装和卸载脚本将变得更加困难。这是副手,我真正遇到的事情......

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5