簡體   English   中英

在不知道路徑的情況下用Java寫入屬性文件

[英]Write to Properties File in Java without knowing it's path

我正在使用類加載器加載我的屬性文件,如下所示。

Properties prop = new Properties();
prop.load(MyClass.class.getResourseAsStream("/Property.properties"));

現在,使用這種方法,我可以讀取屬性文件。 我想將一些數據寫入屬性文件。 我不知道屬性文件的路徑。 然后如何將數據存儲到屬性文件中?

更新

我嘗試了以下操作,但沒有給我正確的路徑:

File propFile = new File("Property.properties");
System.out.println(propFile.getAbsolutePath());

我認為您無法以一種總能奏效的通用方式,因為您的屬性文件可以捆綁在jar中,等等。您可以通過getResource(String)獲取URL,然后對該URL進行操作,例如這是一個文件URL,您可以在那里找到文件名。

 URL u=MyClass.class.getResource("/Property.properties");
 if ("file".equals(u.getProtocol()){
    File f=new File(u.toURI());
 }

但這並不是在所有情況下都可行。

我會將修改后的值寫入一個眾所周知的位置的文件中,並使用捆綁的屬性作為默認值,這些默認值將被文件中的值覆蓋。

您的問題分為兩部分。

首先,閱讀部分。 您說:使用您提供的代碼“我正在加載我的屬性文件...”。 此代碼將文件視為“資源”,並使用類加載器加載它。 Java Runtime中的類加載器機制在這里展示。 粗略地說,此機制在應用程序的當前類路徑中搜索它,並使與第一個匹配資源關聯的輸入流可用於代碼。 在您的情況下可能很好,但是,您應該意識到,如果在類路徑的不同部分中存在多個具有相同名稱的屬性文件(例如,具有相同配置文件的不同JAR文件),那么您可能不知道哪個文件是被閱讀。 確保您從類路徑中讀取正確的文件的唯一方法是確保該配置文件位於應用程序的類路徑中的唯一位置。

這似乎為您工作。 從文件中讀取要比寫入文件容易。

在第二部分中,您要寫入文件 重要的是要注意,您應該知道要寫入的文件的確切位置。 如果您不知不覺地將其轉換為輸出流,那么您可能最終嘗試寫入不允許寫入的流。 因此,在這里,您應該嘗試查找實際物理文件的位置(路徑),例如在計算機的硬盤驅動器上。 在編寫和運行該程序之前,應了解該路徑。 請記住,文件始終存在於文件夾或目錄中。

您的嘗試:

File propFile = new File("Property.properties");
System.out.println(propFile.getAbsolutePath());

查找您要寫入的文件的位置或路徑失敗,因為執行new File("Property.properties"); ,Java會嘗試引用駐留在Java Runtime當前工作目錄中的文件(對操作系統不做任何事情)。 這是指System.getProperty("user.dir")給定的位置。 因此,您的propFile引用了該文件夾中的一個(假設的)文件,對getAbsolutePath()的調用將顯示其路徑。 這不是您想要的文件,因為您正在嘗試寫入路徑未知的文件。 因此,您應該找到文件的路徑,然后使用FileWriter支持的BufferedWriterFileOutputStream支持的BufferedOutputStream寫入此文件。 確保要寫入的文件存在,並且您具有寫入權限。

本質上,將資源作為OutputStream獲取,然后將其傳遞到Properties對象的store()方法。

詳細信息在這里:

http://www.drdobbs.com/jvm/readwrite-properties-files-in-java/231000005

暫無
暫無

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

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