2017-02-22 40 views
0

我有這樣的代碼:如何在同一個包中編寫文件?

try (OutputStream outputStream = new FileOutputStream(PROPERTIES_FILE_PATH)) { 
      properties.setProperty("test", "test"); 
      properties.store(outputStream, null); 
     } 

PROPERTIES_FILE_PATH = "fileName.properties" 這會在項目的根文件。我發現避免這個問題的唯一辦法,就是把文件的絕對路徑,意思是:

src/main/java/com/comany/fileName.properties 

但人們告訴我,IDE超出此wont't工作,在「現實生活」 ......因爲在jar文件中沒有像src/main...這樣的東西。 那麼解決方案是什麼?

+0

你可以用文件夾將文件寫在同一個文件夾中 – haifzhan

+0

'但是人們告訴我,在現實生活中,這不會在IDE之外工作嗎?你是否親自嘗試一下,看看發生了什麼? –

+0

從技術上講,您可能可以編寫一個臨時文件,然後使用內置的ZipFile實用程序將其保存到jar中。但我真的會推薦它。雖然這可能是一個有趣的練習。但不要部署這樣的東西。 –

回答

0

您通常不會修改內部存儲的文件。相反,您應該在JAR中存儲默認文件,並將所有修改存儲爲外部文件。

您可以使用Class.getResourceAsStream()訪問JAR文件中的非代碼資源。

+0

此方法返回一個輸入流,而OP想要寫入文件,而不是從中讀取。 –

+0

是的,但試圖建議一個替代寫入內部文件不是最理想 – Nixivious

0

你可以像這樣做,並使用set方法setParameters()把它寫

public class Configuration { 
private Properties parameters; 
private static Configuration instance = null; 

private Configuration() { 
    parameters = new Properties(); 
    try { 
     parameters.load(getClass().getClassLoader().getResourceAsStream("fileName.proooooperties")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static Configuration getInstance() { 
    return instance == null ? new Configuration() : instance; 
} 


public static void writeProperties(String fileName) { 
    try{ 
     FileOutputStream oFile = new FileOutputStream("fileName.properties", true); 
     parameters.setProperty("test", "testing"); 
     parameters.store(oFile, "comments"); 
     oFile.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public String getParameter(String name) { 
    return parameters.getProperty(name); 
} 
public void setParameters(String name, String value) { 
    parameters.setProperty(name, value); 
} 

}

+0

'getResourceAsStream'返回一個輸入流。 OP想要寫入文件,而不是從中讀取。 –

+0

我明白了,源代碼已經更新。感謝您的提醒 – bluetata

+0

據我所知,'parameters.setProperty'只設置屬性對象中的屬性。它不會使用'parameters.store'將屬性對象保存到文件中,這是OP想要做的。 'parameters.store'需要一個outputStream,而'getResourceAsStream'則返回一個inputStream。 –

0

我結束了創建一個配置文件,在這裏我把我的屬性文件的路徑,我把它放在項目之外。

相關問題