1.リソース・インターフェースを介してリソースを取得
リソースインタフェースの実装クラスは以下のとおりです。
リソース・インターフェースが延びるInputStreamSource
インターフェースを、InputStreamSource
インターフェースはメソッドを持っていますgetInputStream()
ので、まとめると、リソース・インターフェース以下の方法があります。
パブリック クラスResourceTest { / ** ClassPathResourceがリソースを取得する* * / @Test 公共 のボイド TestClassPathは()スローにIOException { リソースリソース = 新新 ClassPathResource( "test.txtのを" ); // ファイルが存在するかどうかを確認: IF ((resource.exists )){ するSystem.out.println( "ファイルが存在" ); } //は、リソースファイルが読み取り可能であるか否かを判断する 場合(resource.isReadable()){ するSystem.out.println( "ファイルを読み取る" ); } // 分析現在のリソース基礎となる資源の代表が開始されている 場合(resource.isOpen()){ するSystem.out.println( "リソースファイルが既に開かれている" ); } のSystem.out.println(resource.getURL()); // のURLリソースにアクセス するSystem.out.println(リソース.getURI()); // のURIリソースへのアクセス ; resource.getFileは()// 現在のリソースに対応するファイルを返します。 System.out.println(resource.contentLength()); // 出力コンテンツ長 のSystem.out.println(resource.lastModified()); // 最後に変更されたリソースは、基礎となるリソースの現在の代表を返します。 resource.createRelative(「MyFileの」); // リソースへの相対パスに基づいて、新しいリソースを作成します。[デフォルトでは、相対パスリソースの作成をサポートしていません] のSystem.out.println(resource.getFilename()); // 取得するリソース・ファイル名 System.out.println(resource.getDescription()); // 現在のリソースは、入力ストリームを表します IF (resource.isReadable()){ 入力ストリームは、IS = resource.getInputStream(); のSystem.out.println(IS)、 IS .close(); } } / ** リソースへFileSystemResourceアクセスを使用して* * / @Test 公共 ボイド TestFileSystem()がスローIOExceptionが{ リソース資源 = 新しい新 FileSystemResource( "D:\\ test.txtの" ); System.out.printlnは( resource.getFilename()); } / ** リソースへのUrlResourceアクセスを使用して** / @Test 公共 無効 TestUrl()スローでMalformedURLException { リソースリソース = 新 UrlResource(「http://docs.spring.io/spring/docs/4.0.0.M1/spring-framework-reference/pdf/spring-frameworkを-reference.pdf」); System.out.println(resource.getFilename())。 } / ** 使用ByteArrayResource获取字节数组封装的资源* * / @Test 公共 ボイド testByteArray()スローのIOException { ByteArrayResource資源 = 新しい ByteArrayResource( "こんにちは" .getBytesを())。 のSystem.out.println(resource.getInputStream())。 } / ** リソースへのInputStreamResource入力ストリームカプセル化アクセスを使用。getInputStream()メソッドを一度だけ呼び出すことができ、入力ストリームのためのリソース、。* * / @Test 公共 ボイド testInputStream()スロー例外{ 入力ストリームは、IS = 新しい新規のFileInputStream( "D \\ test.txtの" ); InputStreamResourceリソース = 新しい新しいInputStreamResource(IS); // InputStreamResourceため、そののgetInputStream()メソッド一度だけ呼び出すことができ、我々は例外をスローします呼び出すために続けています。 IS2 = resource.getInputStream入力ストリーム(); // 入力ストリームの場合メンバーということである戻り のSystem.out.println(IS2); is.close()。 } }
2.インタフェースを介してリソースを取得しResourceLoader
Springフレームワークは、より簡単に、各リソースのプログラマインタフェースの実装クラスの認識を弱めるしようとするリソースにアクセスするためには、別の定義ResourceLoader
のインターフェイスを。インタフェースのgetResource(String location)
メソッドは、リソースにアクセスするために使用することができます。それDefaultResourceLoader実装クラスは、すべての環境に適用することができ、そうでClassPathResource、UrlResourceとを返すことができます。
プレフィックスを作るResourceLoaderをロードするリソースをロードする必要がある場合に指定する必要があります:「クラスパス:パスは」ClasspathResourceへの復帰を表し、「のhttp://パス」と「ファイル:パスは」ないプレフィックスが現在のコンテキストに基づいて必要な場合は、リターンUrlResourceリソースを表し、決定するために、DefaultResourceLoaderのデフォルトの実装では、クラスパスリソースをロードすることです。
@Test 公共 ボイドtestResourceLoader(){ ResourceLoaderローダ = 新しいDefaultResourceLoader()。 リソースリソース = loader.getResource( "http://www.baidu.com" ); System.out.println(リソースのinstanceof UrlResource)。// 真の リソース= loader.getResource( "クラスパス:test.txtの" ); System.out.println(リソースのinstanceof ClassPathResource)。// 真の リソース= loader.getResource( "test.txtの" ); するSystem.out.println(リソースinstanceofは ClassPathResource)。// 真 }
ApplicationContextの経由リソースへのアクセス3.
すべてのApplicationContextのインスタンスはResourceLoaderインタフェースを達成しているので、私たちは春のコンテナを使用して、あなたも、リソースの基礎となる実装を気にすることはできませんリソース実装クラスを作成する必要はありませんが、直接使用applicationContext.getResource()、Beanコンテナに入ります自分自身をリソース、および、関連するリソース情報に連れて行きます。
パブリック クラス myresourceでは実装しApplicationContextAware { プライベートのApplicationContextのApplicationContextを。 公共 ボイド setApplicationContext(ApplicationContextのApplicationContextの)はスローBeansException { この .applicationContext = のApplicationContextと、 } 公共 ボイドリソース()はスローのIOException { リソース資源 = applicationContext.getResource( ":D:ファイル\\ test.txtのを" )。 System.out.println(resource.getFilename())。 System.out.println(resource.contentLength())。 } }
XML設定ファイル:
<ビーンID = "myresourceで" クラス = "com.spring.test.MyResource"> </豆>
テストカテゴリ:
パブリック クラスアプリ{ 公共 静的 ボイドメイン(文字列[]引数){ @SuppressWarnings(「リソース」) のApplicationContextコンテキスト = 新しい ClassPathXmlApplicationContext(「クラスパス:スプリングresource.xml」)。 myresourceでmyresourceで =(myresourceで)context.getBean( "myresourceで" )。 試す{ myResource.resource()。 } キャッチ(IOExceptionを電子){ e.printStackTrace(); } } }