Javaリソースファイルパスの詳細(getResource)(整理版)
4732 ワード
総説
Class.getResourceAsStreamとClassLoader.getResourceAsStreamは同じです.classpathからのリソース読み取りに使用できます.classpathにはclasspathのパスとclasspathのjarが含まれています.異なる:リソースの定義は異なり、1つは主に1つのobjectに対してリソースを取得するために使用され、もう1つはclasspathに対してリソースを取得するために使用され、絶対パスが使用されます.Class.getResourceAsStreamを使用する場合、リソースパスには2つの方法があります.1つは/で始まると、このようなパスは絶対パスを指定し、/でないと、パスはこのclassが存在するパッケージに相対的になります.ClassLoader.getResourceAsStreamを使用する場合、パスはclasspathに対する絶対パスを直接使用します.たとえば、次の3つの文は、実際の結果は同じ
普段、プログラムを书いているときに、ヒントファイルが见つからないことが多いので、异常を投げ出してしまいました.
相対パスの取得説明:相対パス(すなわち、誰に対しても明記しない)は、Javaプロジェクトにおけるファイルが、プロジェクトのルートディレクトリであるウェブプロジェクトにおけるファイルパスに対して、異なるウェブサーバによって異なる(tomcatはtomcatインストールディレクトリbinに対して)
2種類のロードディレクトリの取得(すなわち、実行時にあるクラスが取得されたときにロードディレクトリを取得する)1)一般的な方法1(一般的なjavaプロジェクトでもwebプロジェクトでも、パケットパスが見える第1級ディレクトリにナビゲートする)
3つのウェブプロジェクトルートディレクトリの取得(パブリッシュ後)1 servletから1つのservletを確立し、そのinitメソッドに次の文
四classpathの取得(Eclipseではsrcまたはclassesディレクトリを取得するためのパス)方法1
方法2
五属性ファイルの読み取り方法一
メソッド2
}
出力結果:
:
`getResourceAsStream () inputstream
getResource() :URL
Class.getResource("") Class
Class.getResource("/") classpath
getClassLoader().getResource("") classpath
getClassLoader().getResource("/") !!`
Class.getResourceAsStreamとClassLoader.getResourceAsStreamは同じです.classpathからのリソース読み取りに使用できます.classpathにはclasspathのパスとclasspathのjarが含まれています.異なる:リソースの定義は異なり、1つは主に1つのobjectに対してリソースを取得するために使用され、もう1つはclasspathに対してリソースを取得するために使用され、絶対パスが使用されます.Class.getResourceAsStreamを使用する場合、リソースパスには2つの方法があります.1つは/で始まると、このようなパスは絶対パスを指定し、/でないと、パスはこのclassが存在するパッケージに相対的になります.ClassLoader.getResourceAsStreamを使用する場合、パスはclasspathに対する絶対パスを直接使用します.たとえば、次の3つの文は、実際の結果は同じ
com.explorers.Test.class.getResourceAsStream("abc.jpg")
com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg")
ClassLoader.getResourceAsStream("com/explorers/abc.jpg")
です.普段、プログラムを书いているときに、ヒントファイルが见つからないことが多いので、异常を投げ出してしまいました.
相対パスの取得説明:相対パス(すなわち、誰に対しても明記しない)は、Javaプロジェクトにおけるファイルが、プロジェクトのルートディレクトリであるウェブプロジェクトにおけるファイルパスに対して、異なるウェブサーバによって異なる(tomcatはtomcatインストールディレクトリbinに対して)
2種類のロードディレクトリの取得(すなわち、実行時にあるクラスが取得されたときにロードディレクトリを取得する)1)一般的な方法1(一般的なjavaプロジェクトでもwebプロジェクトでも、パケットパスが見える第1級ディレクトリにナビゲートする)
InputStream is=TestAction.class.getClassLoader().getResourceAsStream("test.txt");
(test.txt \src\test.txt; TestAction src )
TestAction,test.txt
2) ( 1 , '/' )
InputStream is=Test1.class.getResourceAsStream("/test.txt");
(test.txt \src\test.txt, Test1 src )
3つのウェブプロジェクトルートディレクトリの取得(パブリッシュ後)1 servletから1つのservletを確立し、そのinitメソッドに次の文
String relativelyPath=System.getProperty("user.dir");
を書き込む.D:ツールTomcat-6.0webapps002_ext(002_extはプロジェクト名)s 1.getRealPath(")が呼び出された場合、D:ツールTomcat-6.0webapps002_ext(1つ足りない")が出力される.2 httpServiceletRequestからServletContext s1=this.getServletContext();
String temp=s1.getRealPath("/"); ( )
結果:D:ツールTomcat-6.0webapps002_ext四classpathの取得(Eclipseではsrcまたはclassesディレクトリを取得するためのパス)方法1
String cp11111=request.getSession().getServletContext().getRealPath("/");
eg:Thread.currentThread().getContextClassLoader().getResource("").getPath()
出力:t—/E:/order/002_ext/WebRoot/WEB-INF/classes/方法2
Stringt=Thread.currentThread().getContextClassLoader().getResource("").getPath();
System.out.println("t---"+t);
(JdomParseはsrcのあるパッケージのクラスであり、以下同じ)eg:JdomParse.class.getClassLoader().getResource("").getPath()
また、あるパケットにファイルを格納したい場合は、ファイル(パケットの最後のレベルのディレクトリに先に配置)eg
String p1=JdomParse.class.getClassLoader().getResource("").getPath();
System.out.println("JdomParse.class.getClassLoader().getResource--"+p1); : JdomParse.class.getClassLoader().getResource--/E:/order/002_ext/WebRoot/WEB-INF/classes/
出力:JdomParse.class.class.getResource—/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/(JdomParseはsrcディレクトリの下のjdomパケットのクラス)を得ることができます.五属性ファイルの読み取り方法一
String p2=JdomParse.class.getResource("").getPath();
System.out.println("JdomParse.class.getResource---"+p2);
, p.getProperty("name")
メソッド2
InputStream in = lnew BufferedInputStream( new FileInputStream(name));
Properties p = new Properties();
p.load(in);
エンジニアリングsrcディレクトリの下でpropertiesTest.properties(名前の接尾辞はpropertiesでなければならない)ファイルの内容は以下の通りです:Locale locale = Locale.getDefault();
ResourceBundle localResource = ResourceBundle.getBundle("test/propertiesTest", locale);
String value = localResource.getString("test");
System.out.println("ResourceBundle: " + value);
public class FileTest { public static void main(String[] args) {
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
System.out.println(FileTest.class.getClassLoader().getResource(""));
System.out.println(ClassLoader.getSystemResource(""));
System.out.println(FileTest.class.getResource(""));
System.out.println(FileTest.class.getResource("/")); // Class
System.out.println(new File("/").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
}
}
出力結果:
test=hello word
原文住所:http://blog.csdn.net/ak913/article/details/7399056