使用するフレームワークがそのファイルにアクセスできるように、WebContentディレクトリ内のファイルの実際のパスを取得する必要があります。属性として文字列ファイルのみを取得するため、WebContentディレクトリでこのファイルへの実際のパスを取得する必要があります。
私はSpringFrameworkを使用しているので、Springでソリューションを作成できるはずです。
使用するフレームワークがそのファイルにアクセスできるように、WebContentディレクトリ内のファイルの実際のパスを取得する必要があります。属性として文字列ファイルのみを取得するため、WebContentディレクトリでこのファイルへの実際のパスを取得する必要があります。
私はSpringFrameworkを使用しているので、Springでソリューションを作成できるはずです。
サーブレットでこれが必要な場合は、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");
PCからJavaプロジェクトへのパスを変更するようにJavaに指示する必要があるため、Springを使用する場合は:
@Autowired
ServletContext c;
String UPLOAD_FOLDEdR=c.getRealPath("/images");
ただし、サーブレットを使用する場合は、
String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images");
したがって、パスは次のようになります/webapp/images/
:)
リクエストをパラメータとして含めます。その後、Springは、マップされたメソッドを呼び出すときにリクエストオブジェクトを渡します
@RequestMapping .....
public String myMethod(HttpServletRequest request) {
String realPath = request.getRealPath("/somefile.txt");
...
このような状況では、必要なコンテンツをリソースとして抽出し(MyClass.getClass()。getResourceAsStream())、一時的な場所にファイルとして書き込み、このファイルを他の呼び出しに使用する傾向があります。
このようにして、jarにのみ含まれているコンテンツや、現在使用しているWebコンテナーに応じてどこかにあるコンテンツを気にする必要がありません。
Spring Resourceインターフェース(特に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;
}
私の解決策:..../ webapps / mydir /(..../ webapps / ROOT /../ mydir /)
String dir = request.getSession().getServletContext().getRealPath("/")+"/../mydir";
Files.createDirectories(Paths.get(dir));
開発および本番レベルでもarff.txtを使用する場合は、これを使用してみてください
String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");