문서 조작 총화

6665 단어 자바 기반자바
getResource AsStream 과 getResource 의 용법 및 Demo 실례
JAVA 로 파일 을 가 져 오 는 것 은 간단 한 것 같 지만 저 같은 신인 들 에 게 는 파악 이 얕 고 사용 하기에 깊 습 니 다.여러분 이 가장 자주 사용 하 는 것 은 JAVA 의 File 류 입 니 다.D:/test.txt 파일 을 얻 으 려 면 이렇게 File file=new File("D:/test.txt")을 사용 합 니 다.이렇게 사용 하 는 것 이 무슨 문제 가 있 는 지 모두 가 알 고 있 을 것 입 니 다.바로 경로 하 드 코딩 입 니 다.JAVA 정신 에 있어 응용 은 한 번 에 성형 되 고 여기저기 서 사용 할 수 있어 야 합 니 다.그리고 현실 응용 에 있어 최종 적 으로 생 성 된 응용 도 Windows 밖의 운영 체제 에 배 치 될 것 입 니 다.Liux 에 게 응용 에 c:/이런 글 자 를 사용 하면 실패 입 니 다.그래서...우 리 는 절대 경 로 를 직접 사용 하 는 하 드 인 코딩 을 피해 야 한다.
Servlet 응용 프로그램 에서 getRealPath(String str)방법 이 있 습 니 다.이 방법 은 파일 의 경 로 를 동적 으로 얻 을 수 있 지만 직접 손 으로 절대 경 로 를 쓰 지 않 습 니 다.이것 도 권장 되 지 않 는 방법 입 니 다.그러면 우 리 는 어떤 방법 으로 파일 을 더 잘 얻 을 수 있 습 니까?
    Class.getResource() Class.getResourceAsStream()  !

첫째,getResourceAsStream 용법 은 우선 자바 의 getResourceAsStream 에는 다음 과 같은 몇 가지 가 있 습 니 다.
  • Class.getResource AsStream(String path):path 는'/'로 시작 하지 않 을 때 기본적으로 이러한 가방 에서 자원 을 가 져 옵 니 다.'/'로 시작 하면 ClassPath 루트 에서 가 져 옵 니 다.path 를 통 해 절대적 인 경 로 를 만 들 었 을 뿐 결국은 ClassLoader 에서 자원 을 얻 었 습 니 다
  • Class.getClassLoader.getResourceAsStream(String path):기본 값 은 ClassPath 루트 에서 가 져 옵 니 다.path 는'/'로 시작 할 수 없습니다.마지막 으로 ClassLoader 에서 자원 을 가 져 옵 니 다
  • ServletContext.getResourceAsStream(String path):기본적으로 WebAPP 루트 디 렉 터 리 에서 자원 을 가 져 옵 니 다.Tomcat 에서 path 가'/'로 시작 하 는 지 여 부 는 상관 없습니다.물론 이것 은 구체 적 인 용기 구현 과 관련 이 있 습 니 다
  • JSp 아래 의 application 내 장 된 대상 은 바로 위의 ServletContext 의 실현 이다.그 다음으로 getResourceAsStream 의 용법 은 크게 다음 과 같은 몇 가지 가 있 습 니 다.첫째,불 러 올 파일 과 class 파일 은 같은 디 렉 터 리 에 있 습 니 다.예 를 들 어 com.x.y 에 me.class 와 자원 파일 my file.xml 이 있 으 면 다음 과 같은 코드 가 있어 야 합 니 다
  • Java 코드 me.class.getResourceAsStream("myfile.xml");
    두 번 째:me.class 디 렉 터 리 의 하위 디 렉 터 리 에서 예 를 들 어 com.x.y 에 me.class 가 있 고 com.x.y.file 디 렉 터 리 에 자원 파일 my file.xml 이 있 으 면 다음 과 같은 코드 가 있어 야 합 니 다.
    Java 코드 me.class.getResourceAsStream("file/myfile.xml");
    셋째:me.class 디 렉 터 리 에 도 없고 하위 디 렉 터 리 에 도 없습니다.예 를 들 어 com.x.y 에 me.class 가 있 고 com.x.file 디 렉 터 리 에 자원 파일 my file.xml 이 있 으 면 다음 과 같은 코드 가 있어 야 합 니 다.
    Java 코드 me.class.getResourceAsStream("/com/x/file/myfile.xml");
    요약 하면 두 가지 쓰기 일 수 있 습 니 다.첫 번 째 는'/'/'가 프로젝트 의 루트 디 렉 터 리 를 대표 합 니 다.예 를 들 어 프로젝트 이름 은 my procject 이 고'/'는 my procject 를 대표 합 니 다.
    Java 코드 me.class.getResourceAsStream("/com/x/file/myfile.xml");
    두 번 째:앞 에 현재 클래스 를 대표 하 는 디 렉 터 리 가 없습니다.
    Java 코드 me.class.getResourceAsStream("myfile.xml");
    me.class.getResourceAsStream(“file/myfile.xml”);
    2.getResource 용법
    예 를 들 어 우 리 는 다음 디 렉 터 리|–procject|–src|–javaapplication|–Test.java|–file1.txt|–file2.txt|–build|–javaapplication|–Test.class|–file3.txt|–file4.txt 는 위의 디 렉 터 리 에 src 디 렉 터 리 가 있 습 니 다.이것 은 JAVA 소스 파일 의 디 렉 터 리 입 니 다.build 디 렉 터 리 가 있 습 니 다.이것 은 JAVA 컴 파일 후 파일(class 파일 등)의 저장 디 렉 터 리 입 니 다.그러면 Test 클래스 에서 file1.txt file2.txt file3.txt file4.txt 이 네 개의 파일 을 어떻게 얻 을 수 있 습 니까?
    먼저 file3.txt 와 file4.txt 를 말 합 니 다.
    file3.txt(세 가지 가 져 오 는 방법):
    Java 코드 File file 3=new File(Test.class.getResource("file3.txt").getFile();File file3 = new File(Test.class.getResource(“/javaapplication/file3.txt”).getFile()); File file3 = new File(Test.class.getClassLoader().getResource(“javaapplication/file3.txt”).getFile());
    file4.txt:(두 가지 가 져 오 는 방법):
    Java 코드 File file 4=new File(Test.class.getResource("/file4.txt").getFile();File file4 = new File(Test.class.getClassLoader().getResource(“file4.txt”).getFile());
    file 1 과 file 2 파일 은 요?어떻게 얻 습 니까?
    정 답 은 절대적 인 경로 만 적 을 수 있 습 니 다.file 3 과 file 4 처럼 class.getResource()라 는 방법 으로 얻 을 수 없습니다.획득 방법 은 다음 과 같 습 니 다.전체 procject 디 렉 터 리 가 c:/아래 에 있다 면 file 1 과 file 2 의 획득 방법 은 다음 과 같 습 니 다.
    file1.txt Java 코드 File file 1=new File("c:/project/src/javaapplication/file1.txt");
    file2.txt Java 코드 File file 2=new File("c:/project/src/file2.txt");
    요약:
    파일 을 얻 으 려 면 최종 적 으로 생 성 된 class 파일 을 시작 으로 해 야 합 니 다.자바 파일 의 경 로 를 출발점 으로 하지 마 십시오.실제 사용 하 는 것 은'class'이기 때문에 자바 파일 을 가지 고 사용 하지 않 습 니 다.자바 는 컴 파일 형 언어 이기 때 문 입 니 다.
    getResouce()방법의 매개 변 수 는 class 를 출발점 으로 하고 상대 경로 의 개념 을 결합 하면 자원 파일 을 정확하게 찾 을 수 있 습 니 다.루트 디 렉 터 리 에 대해 서 는 서로 다른 IDEbuild 를 사용 하여 서로 다른 위치 에서 나 왔 지만 모두 최상 위 package 를 루트 디 렉 터 리 로 합 니 다.예 를 들 어 웹 응용 프로그램 에서 WEB-INF 디 렉 터 리 가 있 습 니 다.WEB-INF 디 렉 터 리 에는 웹.xml 파일 외 에 classes 디 렉 터 리 가 하나 더 있 습 니 다.맞습니다.WEB 에서 사용 하 는 package 의 맨 위 디 렉 터 리 이자 모든.class 의 루트 디 렉 터 리"/"입 니 다.clasaes 디 렉 터 리 아래 에 file.txt 파일 이 있다 면 상대 경 로 는"/file.txt"입 니 다.상대 경로 가"/"로 시작 하지 않 으 면...그럼 그것 은.class 에 대한 경로 입 니 다.
    getResourceAsStream()방법의 매개 변 수 는 getResource()방법 과 같 습 니 다.getResource()로 File 파일 을 얻 은 후 new InputStream(file)과 같은 결 과 를 얻 는 것 과 같 습 니 다.
    class.getResource("/")–>class 파일 이 있 는 최상 위 디 렉 터 리 를 되 돌려 줍 니 다.일반적으로 가방 이름 의 최상 위 디 렉 터 리 입 니 다.–>file:/home/duanyong/workspace/cxxx/xxxx/bin/WEB-INF/class.getResource("/xxx.txt")–>최상 위 디 렉 터 리 에 있 는 xxx.txt 경 로 를 되 돌려 줍 니 다.file://…./bin/WEB-INF/classes/xxx.txt
    getResource(String path),path 는 class 파일 의 최상 위 대상 이 있 는 상대 적 인 경로 입 니 다.최상 위 디 렉 터 리 가 classes 라면 classes/xxx/yy.txt 와 같은 파일 입 니 다.yy.txt 를 가 져 오 는 문법 은 class.getResource("/xxx/yy.txt")입 니 다.
    자바 코드//classes 최상 위 디 렉 터 리 에 있 는/xxx/yy.txt 파일 System.out.println(Test.class.getResource("/xxx/yy.txt")을 가 져 옵 니 다./이 class 의 이전 경로 System.out.println(Test.class.getResource(Test.class.getSimpleName()+"class")를 가 져 옵 니 다.
    결과:file:/home/guanyong/workspace/test/bin/WEB-INF/classes/xxx/yy.txt file:/home/guanyong/workspace/test/bin/WEB-INF/classes/cn/guanyong/test/test.class
    3.getResource AsStream 과 getResource 용법 비교 실례 주석:testpinyin.txt 는 프로젝트 의 src 아래 에 놓 습 니 다
    Java 코드 import java.io.IOException;import java.io.InputStream;
    public class Test { public void getResource(String url){ InputStream stream = getClass().getResourceAsStream(url); System.out.println(getClass().getResource(url)); byte[] line = new byte[1024*1024]; try { stream.read(line); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String str = new String(line); System.out.println(str.trim()); }
     public static void main(String[] args) {
         new Test().getResource("/testpinyin.txt");
     }
    

    }
    실행 결과:file:/E:/work space/test httpclient/bin/test pinyin.txt emergency 첫 번 째 줄 은 testpinyin.txt 의 경 로 를 얻 었 고 두 번 째 줄 은 testpinyin.txt 의 내용 입 니 다.주의해 야 할 것 은 반드시 앞의'/','/'가 있어 야 한 다 는 것 이다.그렇지 않 으 면 찾 을 수 없다.

    좋은 웹페이지 즐겨찾기