簡體   English   中英

跨平台方式詢問用戶的文檔文件夾?

[英]Cross-platform way to ask for the user's documents folder?

我正在用Java編寫一個跨平台程序,並希望將配置文件粘貼在用戶的文檔文件夾中(Windows下的“我的文檔”,適當的Linux下的“文檔”,以及Mac OS下調用的文件夾),但是我我不知道怎么問Java。

我想遠離硬編碼的東西(如果我們在Windows上做X ,如果我們在Linux上則為Y ,如果我們在OS X上則為Z ),因為這會給我帶來支持的負擔肩膀而不是Oracle開發團隊。

我已經檢查了系統屬性列表,但它似乎沒有包含用戶的文檔文件夾。

可悲的是,沒有簡單的跨平台方式。 您必須利用每個OS平台上的本機功能

  • 以下是有關如何在osx中執行此操作的一些信息
  • 以下是有關如何在Windows中執行此操作的一些信息

對於Linux我沒有方便的鏈接,但鑒於Linux中不一定有Documents文件夾的概念,我不知道一個好的解決方案。 系統屬性user.home至少應該在Linux中有效。

部分解決方案:

boolean isMac = System.getProperty(“os.name”)。equals(“Mac OS X”);

或者使用http://commons.apache.org/vfs/獲取操作系統: http//commons.apache.org/vfs/apidocs/org/apache/commons/vfs2/util/Os.html

//文件夾名稱與Mac OSX的語言相同。

Mac:System.getProperty(“user.home”)+ File.separator +“Documents”);

/用戶/大衛/文件

Win:System.getenv(“APPDATA”));

C:\\ Documents and Settings \\ david \\ Application Data

以某種方式詢問用戶他們想要將數據保存到何處,或使用當前目錄(簡單相對路徑)並提供適當的設置說明。 “詢問”的一種方法是具有可以通過命令行設置的屬性。

不要只用你的應用程序的東西污染用戶的主目錄 - 你怎么知道他們如何組織他們的文檔樹?

我完全厭倦了面向* nix的程序,將他們的小配置文件和數據文件夾放入我的文檔文件夾的根目錄。

這通常不可能以通用方式實現。 您將不得不使用平台相關的apstractions。 我這樣對AppData這樣做,例如,在Windows上我檢測到AppData / Roaming或AppData / Local,這取決於我需要存儲的數據,在其他平台上我在userhome中創建了一個文件夾“.myappname”,並使用它。

對於documents文件夾,您必須閱讀注冊表。 在Windows Vista之前使用user.home propery +“/ Documents”是不合適的,因為在其他語言中它可能是“/ Dokumente”(德語)或其他東西。 只是注冊表有這個文件夾的真實路徑。

在Linux平台上,它取決於桌面環境。 你只需要嘗試一下。 Gnome和KDE使用不同的地方來存儲Documents文件夾,恕我直言。 如果你只是在那里使用FVWM,除了user.home屬性之外,沒有預定義的文檔位置,什么是好的后備。

假設這是一個需要安裝的應用程序,為什么不要求用戶在安裝過程中指定位置。 使用此信息生成運行腳本,該腳本將設置適當的環境變量。 作為一種規范,用戶不應該運行java命令!

當用戶使用此運行腳本啟動應用程序時,應用程序可以讀取環境變量。

或者,使用配置文件創建一個jar文件。 使用Classloader的getResourceAsStream讀取配置文件。 只要配置jar位於類路徑下,您就可以訪問這些文件。 這還具有隱藏配置以防意外修改的附加優點。 這也適用於文件夾(如果配置需要由用戶修改)。

根據用戶操作系統硬編碼獲取路徑的方法有什么問題? 可能存在大的差異,OS的工作方式也不同。 只需在啟動時根據操作系統找到文檔文件夾的路徑,並繼續在任何需要的地方引用該路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM