12

Java に URI オブジェクトがあります。InputStream に変換したいのですが、変換はプロトコルに依存する必要があります。私のURIが次の場合、私はこのようにすることができますhttp://somepath.com/mysuperfile.xsl

return myURI.toURL().openConnection().getInputStream();

または、私のuriが次の場合file:///somepath/mysuperfile.xsl:

return new FileInputStream(Paths.get(myURI).toFile());

または多分別の方法でさえ。手動で確認することはできますが、Java には、おそらくその新しいjava.nio.*パッケージを使用して、適切に確認する方法がありますか?

4

3 に答える 3

21

すべての URI は、次の 4 つの部分で構成されると定義されています。

[scheme name] : [hierarchical part] [[ ? query ]] [[ # fragment ]]

必要なものがスキーム名(大まかにプロトコルに変換される)である場合は、単に使用します

switch ( myURI.getScheme() ) {
  case "http":
    return myURI.toURL().openConnection().getInputStream();
  case "ftp":
    // do something   
  case "file":
    return new FileInputStream( Paths.get(myURI).toFile() );
}

http://docs.oracle.com/javase/6/docs/api/java/net/URI.html#getScheme%28%29

または、スキームを微分InputStream せずに単に生成したい場合は、単に使用します

return myURI.toURL().openStream();

また

return myURI.toURL().openConnection().getInputStream();

(HTTPプロトコル/スキームですでに行ったように)

于 2013-10-17T15:26:59.863 に答える
1

ファイル URI を特別に扱う必要はありません。どちらの場合でも同じコードが機能します。次の小さなスクラッチ プログラムでテストしました。

URIReadTest.java

import java.io.*;
import java.net.*;

public class URIReadTest {
    public static void main(String[] args) throws Exception {
        URI uri = new URI("file:///tmp/test.txt");
        InputStream in = uri.toURL().openConnection().getInputStream();
        // or, more concisely:
        // InputStream in = uri.toURL().openStream();
        int b;
        while((b = in.read()) != -1) {
            System.out.print((char) b);
        }
        in.close();
    }
}

システム/tmp/test.txtで を作成すると、上記のコードをコンパイルして実行すると、その内容が出力されます。

于 2013-10-17T15:24:37.587 に答える