2013-05-09 137 views
3

比方說,我有下面的代碼:Java的FileOutputStream中默認創建路徑

String fileName = "name.txt"; 
FileOutputStream fileOut = new FileOutputStream(fileName); 
wb.write(fileOut); 

這樣一來,該文件將在項目的bin文件夾下創建。

但是,如果我在整個路徑特定文件名:

String fileName = "c:/temp/name.txt"; 

這個文件將在創建在c:\ temp文件夾。

很對?爲什麼會發生這種情況,FileOutputStream如何工作?

+0

爲什麼不運行它並查看會發生什麼 – 2013-05-09 19:26:06

+1

關閉輸出流。 – Tdorno 2013-05-09 19:27:41

+0

我建議你閱讀這個Java教程:http://docs.oracle.com/javase/tutorial/essential/io/index.html – Barranka 2013-05-09 19:28:24

回答

1

除非您指定絕對路徑,否則路徑相對於當前工作目錄。

如果您當前的工作目錄是您項目中的bin文件夾,它將在那裏創建。

1

如果您只指定文件名,它將在當前工作目錄中創建。如果您確實指定了絕對路徑,那麼它當然會在該路徑上創建。

2

如果您未指定絕對路徑,例如如果你只指定文件名,那麼你的程序或操作系統需要弄清楚,在哪裏找到這個文件。出於這個原因,正在運行的程序總是有一個工作目錄。這恰好是默認啓動它的文件夾。

0

這是關於相對和絕對目錄。假設您指定路徑foo/bar。它將在工作文件夾的foo目錄中創建一個文件bar。這同樣適用於../foo/bar它會在工作目錄上方的文件夾中的foo目錄中創建bar文件。但是,如果您鍵入C:\\Documents\ and\ Settings\User\Desktop\bar(或/home/user/Desktop/bar),它會在桌面上創建一個bar。欲瞭解更多信息,請看here

2

這不是FileOutputStream的工作原理,它是關於操作系統分配給進程,當它啓動時,它

該路徑稱爲current working directory的路徑。從該目錄中計算出所有relative paths。簡單文件名是相對路徑(到當前工作目錄)。

如果您指定一個absolute path那麼此路徑用於創建該文件。

您可以在this wiki page上閱讀更多關於路徑。