문서 조작 총화
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 에는 다음 과 같은 몇 가지 가 있 습 니 다.
두 번 째: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 의 내용 입 니 다.주의해 야 할 것 은 반드시 앞의'/','/'가 있어 야 한 다 는 것 이다.그렇지 않 으 면 찾 을 수 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
범용 용법 예시앞으로 51CTO 에 정착 해 기술 개발 에 전념 할 테 니 잘 부탁드립니다.다음 코드 는 자신 이 (저자: 이 흥 화) 를 공부 할 때 두 드 린 코드 로 주석 이 완비 되 어 있다. 범용 클래스 Point. ja...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.