2012-06-27 110 views
3

我正在開發一個允許用戶查看多組(主要是本地存儲)文件的swing應用程序。我能夠存儲文件的列表(其它偏好之間)的文本屬性文件,但是當我嘗試拉文件值回來了,用從屬性文件讀取文件路徑問題

myProperties.getProperty("File")

它摒棄的「\」一些 s在文中。我證實,寫入屬性文件是這樣的:

myPrintWriter.println("File = " + myFile.toString().replaceAll("\\\\", "/"))

或本:

myPrintWriter.println("File = " + myFile.toString().replaceAll("\\\\", "\\\\\\\\"))

將使getProperty()工作更喜歡我預期,但我並不想再轉換我的數據轉換爲特定於Java的格式,而沒有在API中進行解釋,所以我決定將它寫在Stack Overflow上。


但是當我在我的帖子中遇到這一點時就開始感到尷尬;我即將發佈Stack Overflow,甚至沒有諮詢關於java.util.Properties(隨JDK發佈)的Java源代碼。我發現Javadoc對Properties.load()的評論表明這是一個設計決定,例如,允許屬性值包含換行符。我想我會考慮用XML編寫我的屬性文件,如果我發現我需要這種語言獨立性。


後記:所以這是我對堆棧溢出的第一篇文章,我已經回答了我自己的問題,但我已經決定無論如何它張貼在希望一些人(或者,也許,一些人爲的自然語言 - 處理智能)可能會發現它有用(或照亮)。另外,我很好奇任何想法或建議人們可能會回覆。 TL; DR?謝謝閱讀!

回答

1

你可以使用Properties.store()寫出來你的屬性。 store()被記錄爲load()將會讀取的格式的寫入屬性,所以它將負責任何需要完成的按摩。

+0

謝謝,我認爲這更像我正在尋找的東西!只有〜15特定於屬性的方法,我真的應該通讀方法名稱/簽名... –

2

如果適用,您可以使用雙反斜線 - c:\\test\\test.txt

Properties props = new Properties(); 
props.setProperty("test", "c:\\test\\test.txt"); 
System.out.println(props.getProperty("test")); 

在Windows系統,您還可以使用正斜槓 - c:/test/test.txt

Properties props = new Properties(); 
props.setProperty("test", "c:/test/test.txt"); 
System.out.println(props.getProperty("test")); 
+1

是的,這幾乎是我決定要做的。正如我在我的文章中提到的,這種行爲在Javadoc中爲Properties類(不是在getProperty()中,而是在load()中的「upstream」)中解釋。 –