質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

4回答

58928閲覧

spring bootで静的ファイルにアクセスする方法

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1グッド

1クリップ

投稿2016/01/19 11:59

Spring bootでシステム構築をしているのですが、cssやjs以外の静的ファイルのアクセス方法が分からず困っています。

デプロイ方法:jar

具体的には、src/main/resourcesの中に新規にディレクトリを作り、javaでアクセスするためのファイルを設置しています。
ネットで検索したところこのような悩みを抱えている方は見つかりませんでしたが、そもそも方法として間違っているのでしょうか。

最悪jarファイルの設置ディレクトリに該当ファイルを設置することを考えておりますが、デプロイが複雑になるため、極力jar内にファイルを設置したいと考えています。

良い方法、あるいは上記の解決方法についてご存知の方がいましたら、ご教授願います。

odenman👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

私も同様の疑問を持ち最近調べました
恐らく質問者様がやりたいことと同じかと思います

Spring に含まれている ResourceLoader というのを使うとファイルの取得が簡単にできます。
http://docs.spring.io/autorepo/docs/spring/3.2.x/spring-framework-reference/html/resources.html#resources-resourceloader

上記のドキュメントにも書かれてますが、getResource の引数によってどこから取得するかが変わります
classpath: ~とした場合には jar 内部のパスとして取得
file: ~とした場合にはファイルシステムのパスとして取得

なので、classpath: ~ の形式で指定することで、
jarファイル内部のファイルにアクセスすることができます

以下サンプルは動作確認してませんが参考までに

java

1import java.io.File; 2import org.springframework.core.io.Resource; 3import org.springframework.core.io.ResourceLoader; 4 5@Slf4j 6@Controller 7public class TestController { 8 9 @Autowired 10 ResourceLoader resourceLoader; 11 12 @RequestMapping(method = RequestMethod.GET, value = "/test") 13 public void index() throws Throwable { 14 String filepath = "path/to/file"; // src/main/resources 配下の相対パス 15 Resource resource = resourceLoader.getResource("classpath:" + filepath); 16 17 String name = resource.getFilename(); 18 log.info("name: " + name); 19 20 File file = resource.getFile(); 21 log.info("file.exists(): " + file.exists()); 22 log.info("file.getAbsolutePath(): " + file.getAbsolutePath()); 23 } 24}

投稿2016/03/01 05:47

Chanmoro

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nittere

2016/03/01 15:06

ほぼ実績のある詳しいコードの記載までありがとうございます。 とても参考になりそうです、次回同様のことをする際、参考にさせて頂きます。
guest

0

Spring Boot(というかSpring MVC)上での静的ファイル(css, js, 画像など)へのアクセス方法をまとめた記事をQiitaに投稿しているので、興味があればご覧ください。

http://qiita.com/kazuki43zoo/items/e12a72d4ac4de418ee37

投稿2016/05/15 03:27

kazuki43zoo

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

src/main/resources/files/filereadtest.txt を配置した状態で

java

1package teratail; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6 7public class FileReadExec { 8 9 public static void main(String[] args) throws IOException { 10 BufferedReader br = new BufferedReader( 11 new InputStreamReader(ClassLoader.getSystemResourceAsStream("files/filereadtest"))); 12 System.out.println(br.readLine()); 13 br.close(); 14 15 } 16} 17

こんな感じで取得できませんか?Springを使わずjava標準のクラスのみで書いてますが、
ClassLoader.getSystemResourceAsStream({リソースファイルのクラスパスからの相対位置})
で読み込めると思います。

投稿2016/01/31 13:06

yohira0616

総合スコア255

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nittere

2016/03/01 15:05

今更ではございますが、アドバイスありがとうございます。 問題となっていた件はいろいろあってファイルを外に出してしまったのですが、次回以降参考にさせて頂きます。
guest

0

ブラウザアクセスでしょうか?
そうであれば
src/main/resources配下のstaticディレクトリ内であればアクセスできると思います。

たとえば、下記の場合は/<context>/file/hoge.pdfでアクセス可能です。
src/main/resources
└ static
└ file
└ hoge.pdf

Javaアクセスするのであれば通常のファイル読み込みの処理でアクセス可能だと思います。

認識違ったらすいません。

投稿2016/01/22 09:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nittere

2016/01/22 14:38

ご返答ありがとうございます。 java側からの直接アクセスを考えておりました。 通常のファイルアクセスと行きたいところなのですが、jarファイル内に固まっているファイルのパスの場所が分からずアクセスが出来ない状態でした。 現状諦めてWEB経由で、かつjarファイルの外にファイルを出してアクセスしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問