2017-02-20 3 views
0

"levels"폴더에있는 txt 파일을 읽으려고합니다. 스캐너를 사용하는 클래스는 src/anotherPackageName입니다. 내가 실행할 때 :프로젝트가 아닌 다른 폴더에서 파일을 읽는 방법

Scanner s = new Scanner(new File("levels/level0")); //adding .txt doesn't fix 

예외를 throw합니다. 나는 절대 경로를 사용하고 싶지 않고 가능하다면 프로젝트와 관련이있다. 이것은 내 폴더 구조 :

D:\OneDrive\Folder\AnotherFolder\ProjectName 

ProjectName 
    src 
     packageOne 
      ClassWhereImUsingScanner 
      OtherClasses 
     (...) 
    levels 
     level0 
     level1 
     (...) 

답변

2

그래서 파일에 액세스하기 위해 당신이 뭔가를 할 수 있습니다 :

FileReader sourceFile = new FileReader("levels/level0.txt"); 
BufferedReader inStream = new BufferedReader(sourceFile); 
String Line = inStream.readLine(); 

그런 다음 데이터와 어떻게 당신이 그것을 저장할에 따라 토크 나이를 사용할 수 있습니다.

이 예를 볼 수 있습니다. http://www.mkyong.com/java/how-to-read-file-from-java-bufferedreader-example/

1

일반적으로 경로가 당신의 실행을 기준으로, 그러나 또한, 이클립스 프로젝트 설정에 따라 달라집니다 당신이 디렉토리 구조 당신에 대해 더 많은 정보를 보낼 수 있을까? 이 같은 시도하면 구조를 기반으로

: 대부분의 자바 코드에서, 프로젝트의 최종 상태가 IDE에서 실행되지 않는다는 것이 아니라 일부 생산 시스템에서,

Scanner s = new Scanner(new File("../levels/level0")); 
1

곰 염두에두고 (예 : 앱 또는 서버). 이 경우 개발 소스 코드 구조를 사용할 수 없습니다.

자바에서 텍스트 파일이나 다른 리소스를 읽는 방법에는 두 가지가 있습니다. 실제 파일 경로를 찾을 수 있습니다.이 경우 개발 소스 트리가 부족한 경우 처리해야합니다. 그렇지 않으면 텍스트 파일을 프로젝트에 묶는 방법을 찾아야합니다.

대부분의 Java 프로젝트는 JAR 파일 또는 WAR 파일 (웹 응용 프로그램 용) 또는 Android APK와 같은 일종의 아카이브로 컴파일됩니다. 대부분의 경우 자신의 텍스트 파일을 프로젝트 아카이브에 추가 할 수 있습니다. 예를 들어 Maven 프로젝트에서 텍스트 파일을 src/main/resources 폴더에 넣으면 컴파일 된 JAR에 포함되어야합니다.

그러나이 경우 텍스트 파일은 더 이상 별도의 파일이 아닙니다. 디스크가 아니라 오히려 아카이브 내부의 데이터 묶음입니다. 실제 File 개체를 얻기 위해 압축 파일을 압축 해제 할 수 있지만 실제로 필요한 모든 것이 바이트를 읽는 것이면 낭비입니다.

따라서 이와 같은 텍스트 파일을 읽는 가장 일반적인 방법은 기존의 ClassLoader 메커니즘을 사용하는 것입니다.이 방법은 디스크 (또는 아카이브 또는 네트워크를 통해)에서 .class 파일을 읽는 것입니다. ClassLoader은 컴파일 된 코드와 나란히있는 바이트를로드하는 방법을 이미 알고 있으므로 사용할 수 있습니다. 귀하의 경우에는

, 당신은 같은 것을 할 수 있어야한다 :이 경우

Scanner scanner = new Scanner(
    getClass().getResourceAsStream("/path/to/file.txt")); 

/path/to/file.txt 경로는 클래스에서로드 된 경로에 상대적입니다. 예 : 클래스의 이름이 my.package.Foo 인 경우 실제 클래스 바이트는 my/package/Foo.class이라는 폴더 (파일 시스템 폴더 또는 JAR 파일 등)에 있습니다.이 경우 path/to/file.txtmy/package/Foo.class은 같은 루트를 기준으로합니다.

자세한 내용은 the documentation on resources을 참조하십시오.

관련 문제