2014-07-25 29 views
0

我安裝了tomcat,並將它與Eclipse Luna Java EE一起使用。問題是我的一個類讀取一個文本文件。當我將它作爲Java應用程序執行時,它會正確讀取文件。當我在服務器上執行它(「在服務器上運行」)時,它會以nullpointexception崩潰。Eclipse,Tomcat和MacOS X:user.dir不正確

我檢查了它正在讀取文件的路徑。當它在服務器上執行時,它會嘗試從「Eclipse.app/Contents/MacOS/」讀取文件。只是爲了它,我試圖把文本文件放在那裏,並沒有說它不再找到它,但是每當我嘗試用Scanner讀取它時,它都會產生這樣的結果:

java.util.Scanner [delimiters = \ p {javaWhitespace} +] [position = 0] [match valid = false] [need input = false] [source closed = false] [skipped = false] [group separator =。] [小數分隔符= \,] [正面前綴=] [負面前綴= \ Q- \ E] [正面後綴=] [負面後綴=] [NaN string = \ Q?\ E] [infinity string = \ Q?\ E]

永遠不會超出一行(hasNext總是爲false)。

所以,我的問題是:

1 - 我怎樣才能得到它去尋找其他地方的.txt文件(在項目的根目錄,例如)?

2 - 爲什麼掃描程序僅在運行類作爲java應用程序而不是服務器時纔在文件中找到內容?

回答

1

對於那些誰有同樣的問題:

我打印掃描儀的對象,這就是爲什麼我得到的文本。據瞭解,Scanner仍然沒有讀取文件,我在其他地方看到這往往是一個編碼問題。

不知何故,只有當我通知我正在閱讀的文件的編碼時,掃描儀才能正常工作。所以

Scanner f=new Scanner (fileobject, "UTF-8"); 

爲我工作。

從user.dir開始,我通過選擇「運行配置」,選擇Apache,並在屬性中選擇了我當前的工作區,從而更改了Eclipse上Apache Tomcat的屬性。

3

如果你運行的應用程序作爲網絡應用程序,那麼你應該尋找之一:

  • 絕對路徑
  • 的資源(例如,在類路徑)
  • 一上下文相對路徑

絕對路徑很簡單,可以使用初始化參數,系統屬性,配置文件等來定義。

類路徑資源必須位於應用程序的類路徑中。

相關資源關閉ServletContext

使用的功能無論文件來自哪裏,例如它應該需要一個流或其他東西,文件應該可用。這樣的功能可以從您的網絡應用程序,獨立的類如static main事物或單元測試中使用。

+0

如何檢查應用程序的類路徑,以及如何在創建File對象時獲取它? – francisaugusto

+0

你不需要做任何事情,使用getResourceAsStream。 –

+0

好的,我會試試!謝謝! – francisaugusto