2014-09-06 42 views
1

嗨,我正在使用maven web項目,並且想要寫入文件abc.properties。該文件放置在標準/ src/main /資源文件夾中。我的代碼是:在maven項目中寫入文件

FileWriter file = new FileWriter("./src/main/resources/abc.properties"); 
      try { 
       file.write("hi i am good"); 
      } catch (IOException e) { 
       e.printStackTrace(); 

      } finally { 
       file.flush(); 
       file.close(); 
      } 

但它不工作,因爲路徑不正確。我嘗試了許多其他的例子,但無法給出這個文件的路徑。

你能否幫我設置放在資源文件夾中的文件的路徑。

謝謝

+0

/src/main/resources是您希望在運行時添加到類路徑中的資源文件的maven常規路徑。當你使用maven命令從maven項目創建jar/war時,這個目錄不會在那裏。 maven會把這個目錄下的所有資源放到你生成的工件的類路徑中。 – Adi 2014-09-06 19:02:40

+0

你想從程序動態生成文件或只是希望它在classpath中被複制? – Adi 2014-09-06 19:06:22

+0

在運行時,我會寫一些東西給這個文件,並會讀取它 – Mr37037 2014-09-06 19:07:53

回答

1

我認爲你很困惑建設時間和運行時間。在buildtime期間,你有你的src/main/java,src/main/resourcessrc/main/webapp,但是在運行期間,這些都被捆綁在一個war文件中。這意味着再也沒有src/main/resources這樣的東西了。 最簡單的方法是寫入[tempFile] [1]並寫入該文件。最好的方法是配置你的outputFile,例如在wqeb.xml

[1]:http://docs.oracle.com/javase/6/docs/api/java/io/File.html#createTempFile(java.lang.String,java.lang.String中)

+0

你能否詳細說明你的觀點?用一些編碼的例子? – Mr37037 2014-09-06 19:36:38

+0

File file = File.createTempFile(「abc-」,「.properties」); FileWriter writer = new FileWriter(file); – 2014-09-06 19:39:42

0

如果你的文件下的src/main /資源下降,這最終會下你-的webapp/WEB-INF/classes中目錄如果你的項目是封裝爲一個Web應用程序,即maven-war-plugin

在運行時,如果你要到位於後者目錄下,其被視爲Web應用程序資源,從而已經存在於應用程序類路徑的文件,你可以使用getResourceAsStream()方法無論是在ServletContext或使用當前類ClassLoader

從當前線程上下文:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream is = classLoader.getResourceAsStream("abc.properties"); 
FileWriter file = new FileWriter(new File(new FileInputStream(is))); 
// some funny stuff goes here 

如果你有機會獲得servlet上下文:

ServletContext context = getServletContext(); 
InputStream is = context.getResourceAsStream("/abc.properties"); 
FileWriter file = new FileWriter(new File(new FileInputStream(is))); 
// some funny stuff goes here 

請注意後面示例中的前導斜槓。

+0

文件找不到接受FileInputStream的構造函數 – jDub9 2017-08-31 20:21:25

+0

FileInputStream找不到接受InputStream的構造函數 – jDub9 2017-08-31 20:21:38

+0

這不起作用。\t \t FileInputStream無法找到接受InputStream的構造函數 – fndg87 2017-11-17 19:28:29