WebContentフォルダーでファイルの実際のパスを取得するにはどうすればよいですか?
-
03-10-2019 - |
質問
WebContentディレクトリでファイルの実際のパスを取得する必要があります。これにより、使用するフレームワークがそのファイルにアクセスできるようになります。文字列ファイルを属性としてのみ使用するため、WebContentディレクトリでこのファイルへの実際のパスを取得する必要があります。
Spring Frameworkを使用しているため、春に解決策を作成できるはずです。
解決
サーブレットでこれが必要な場合は、使用してください getServletContext().getRealPath("/filepathInContext")
!
他のヒント
getServletContext()。getRealPath( "") - コンテンツが.warアーカイブから利用可能になった場合、この方法は機能しません。 GetServletContext()はnullになります。
この場合、別の方法を使用して実際のパスを取得できます。これは、プロパティファイルへのパスを取得する例c:/program files/tomcat 6/webapps/myapp/web-inf/classes/somefile.properties:
// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/"
URL r = this.getClass().getResource("/");
// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
String decoded = URLDecoder.decode(r.getFile(), "UTF-8");
if (decoded.startsWith("/")) {
// path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
decoded = decoded.replaceFirst("/", "");
}
File f = new File(decoded, "somefile.properties");
JavaにPCからJavaプロジェクトにパスを変更するように指示する必要があります。
@Autowired
ServletContext c;
String UPLOAD_FOLDEdR=c.getRealPath("/images");
ただし、サーブレットを使用する場合は、使用するだけです
String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images");
したがって、パスはなります /webapp/images/
:)
このような状況では、必要なコンテンツをリソースとして抽出する傾向があります(myClass.getClass()。GetResourceAsStream())は、一時的な場所にファイルとして書き込み、他の呼び出しにこのファイルを使用します。
このようにして、ジャーにのみ含まれているか、現在使用しているWebコンテナに応じてどこかにあるコンテンツを気にする必要はありません。
リクエストをパラメーターとして含めます。スプリングはマッピングされたメソッドを呼び出すときにリクエストオブジェクトを渡します
@RequestMapping .....
public String myMethod(HttpServletRequest request) {
String realPath = request.getRealPath("/somefile.txt");
...
Spring Resource Interface(特にServletContExtresource)を使用できます。 http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/resource.html
このアプローチでは、リソースローダーを使用して、アプリ内のファイルへの絶対パスを取得し、アプリのルートフォルダーにいくつかのフォルダーを上げます。サーブレットのコンテキストは必要ありません!これは、Web-INFフォルダーに「web.xml」がある場合に機能するはずです。このタイプの構成は通常、アプリから外部に保存されるのが最適であるため、開発のみにこれを使用することを検討することをお勧めします。
public String getAppPath()
{
java.net.URL r = this.getClass().getClassLoader().getResource("web.xml");
String filePath = r.getFile();
String result = new File(new File(new File(filePath).getParent()).getParent()).getParent();
if (! filePath.contains("WEB-INF"))
{
// Assume we need to add the "WebContent" folder if using Jetty.
result = FilenameUtils.concat(result, "WebContent");
}
return result;
}
開発と生産レベルでもarff.txtを使用する場合は、これを使用してみてください
String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");