2016-03-07 75 views
1

我曾希望使用:classpath:/mydata/response.xml將文件複製到。設置在Tomcat上運行的相對路徑

像這樣.. Path dest = Paths.get(「classpath:/mydata/response.xml」);

春季啓動這適用於其他地方,但不使用路徑!

我想一個文件在複製這樣...

      InputStream is = file.getInputStream(); 

          //Which relative Path syntax? 
          Path dest = Paths.get("./src/main/resources/mydata"+fileName); 
          Files.copy(is, dest); 

任何建議,如何設置我的文件存儲在Tomcat中的相對路徑?

我的目標是:

MyProject的\ SRC \主\資源\ MYDATA

這是一個很好的春季啓動項目..

+0

我推薦作爲_ ** strong ** _可以想象得到,您不會將數據放在您的Web應用程序目錄層次結構中的任何位置。這樣做會使升級到新版本的應用程序變得困難;你可以忘記爲部署做一個簡單的戰爭。 –

+0

嗯,沒錯。所以在我的例子Tomcat中設置服務器上的絕對路徑會更好。我仍然不介意如上所述知道如何設置相對路徑。 – JohnnyO

+0

如果你有'HttpServletRequest請求',你可以使用'request.getServletContext()。getRealPath(「./foo/bar.html」);'獲得給定的dir /文件的實際文件系統路徑。這可能與'/ usr/local/tomcat/webapps/yourapp/foo/bar.html'類似。或者,如果你將ServletContext保存在某個地方,只需要'context.getRealPath(「.....」)''。請參閱[docs for getRealPath](https://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String))...但是這不會回答你的問題關於與**類路徑** _相關的問題。 –

回答

0

使用相對CLASSPATH的路徑是不是真的可以實現的,因爲類路徑是目錄和/或jar文件的列表。如果有多個目錄,你應該使用哪一個?如果有只有 jar文件,它根本沒有意義。 我們的Tomcat服務器啓動腳本的一個開始的類路徑是這樣的:

CLASSPATH=$CATALINA_HOME/bin/tomcat-juli.jar:\ 
$JAVA_HOME/lib/tools.jar:\ 
$CATALINA_HOME/bin/commons-daemon.jar:\ 
$CATALINA_HOME/bin/bootstrap.jar 

如果你想,而是存儲在Web應用程序空間內的/訪問文件,您可以使用ServletContext解析相對路徑你的應用程序的安裝目錄。使用getRealPath() method但要小心,因爲如果翻譯無法執行,它可能會返回「null」。

在Web應用程序的文件系統結構中存儲任何內容都可能導致很多問題,因爲重新部署將不得不保存添加的文件或將其銷燬。 我建議您創建一個可配置的數據目錄,該目錄的根目錄可以在您的web.xml文件(或其他部署描述符)中指定,例如.properties文件或<init-param>,具體取決於哪個框架(您可能正在使用))。