2013-11-26 1 views
1

Scanner으로 읽은 표준 텍스트 파일이 있는데 첫 번째 행에는 읽을 이미지 이름 (텍스트 파일과 같은 폴더에 있음)이 들어있는 경우 어떻게 파일 이름을 사용하여 파일을로드 할 수 있습니까? 화면에 표시 할 이미지? 지금 당장은 "입력 파일을 읽을 수 없습니다!"라고 말하는 javax.imageio.IIOException이 나타납니다. 왜 안되는지 알 수 없습니다.filename이 외부 텍스트 파일에 정의되어있을 때 어떻게 파일을로드 할 수 있습니까?

MapBig.jpg 
2 
5 
439 203 405 253 431 280 499 257 495 217 
5 
57 147 164 72 190 127 105 300 70 260 

여기를 읽어 내 코드입니다 :

다음은 텍스트 파일의 inScanner의 인스턴스 image = ImageIO.read(new File(in.nextLine()));.

텍스트 파일에 ./MapBig.jpg을 사용해 보았는데 동일한 문제가 발생합니다.

나는 또한이 파일은 내 프로젝트의 소스 폴더에 나는 파일 MapBig.jpg


로 다시 ..., 같은 폴더를 ClassLoader.getSystemResourceAsStream("map.data");를 사용하여 텍스트 파일을 읽고 있어요 주목해야한다 가정 다음은 오류가 발생했을 때 스택 추적입니다.

javax.imageio.IIOException: Can't read input file! 
    at javax.imageio.ImageIO.read(Unknown Source) 
    at graphics.MapPanelSettings.<init>(MapPanelSettings.java:32) 
    at graphics.GameFrame.initialize(GameFrame.java:71) 
    at graphics.GameFrame.<init>(GameFrame.java:49) 
    at game.GameLauncher.main(GameLauncher.java:9) 
+0

귀하의 질문에 정답을 주려고했지만 스택 추적 오류를 게시 할 수 있습니까? 그래서 우리는 쉽게 어떤 문제가 발생하는지 볼 수 있습니까? 미리 감사드립니다. –

+0

스택 추적을 기반으로합니다. 실제로 잘못된 입력 파일입니다. 입력 파일을 읽을 수 없으므로 파일을 잘못로드 한 것일 수 있습니다. 또한'resources' 디렉토리가 올바르게 배치되었는지 확인해야합니다. 이 디렉토리는 ** 당신의'src' 디렉토리 안에 ** 있어야합니다. 나는이 대답을 더 자세히 설명했다. –

답변

2

문제는 적절한 위치에 참입니다.
당신은 당신이 클래스 로더로 사용하려는 위치를 얻어서 적절한 경로를 구성 할 수 있습니다 :이 작업을해야

URL url = ClassLoader.getSystemResource("map.data"); 
String fileName = in.nextLine(); 
String dirPath = new File(url.getPath()).getParent(); 
File myImage = new File(dirPath, fileName); 

. 불완전한 원래 예제를 유감스럽게 생각합니다.

편집 글쎄, 실제로 "map.data"위치를 사용하여 경로를 계산할 필요는 없습니다.직접 사용하시는 분 :

String fileName = in.nextLine(); 
URL imageUrl = ClassLoader.getSystemResource(fileName); 
File myImage = new File(imageUrl.getPath()); 

희망 하시겠습니까?

1

이미지는 .jar 파일 자체가 아니라 파일 시스템에서로드해야합니다. 이미지가 시스템의 다른 위치 (.jar 파일보다 다른 디렉토리)에 있으면 MapBig.jpg과 다른 파일 이름을 사용해야합니다. map.data 파일에서 파일 이름을 변경하거나 map.data 파일에서로드 된 파일 이름의 접두어로 기본 디렉토리를 추가 할 수 있습니다. 로드하려는 파일이 Jar 파일 자체에서 loacated 될 때마다 리소스로로드해야합니다. 울부 짖는 소리의 예를 확인 :

URL imgUrl = getClass().getResource("resources/" + in.nextLine()); 
ImageIcon imgIcon = new ImageIcon(imgUrl); 
Image img = imgIcon.getImage(); 

에게 당신을 : 이미지가 하위 디렉토리에있는 경우

URL imgUrl = getClass().getResource(in.nextLine()); 
ImageIcon imgIcon = new ImageIcon(imgUrl); 
Image img = imgIcon.getImage(); 

, 당신은 예를 들어, 적절한 디렉토리 경로와 파일 이름을 씁니다 또한로드해야하는 파일 이름이 올바른지 여부를 디버그해야합니다. 예를 들어, image = ImageIO.read(new File(in.nextLine())); 줄을 임시로 System.out.println("File to load: " + in.nextLine().toString());으로 바꾸고이 이름이 올바른지 확인하십시오. 다음 스크립트를 사용하여로드하려는 파일이 있는지 여부를 자동으로 확인하고, 그렇지 않은 경우 오류를 인쇄 할 수 있습니다.

File f = new File(in.nextLine()); 
if(f.exists() && f.isFile()) 
    image = ImageIO.read(f); 
else 
    System.out.println("Unable to load image, file doesn't exist: " + f.getName()); 
+0

올바른 파일 이름을 읽었으나 파일을 찾지 못했습니다. 올바른 폴더를 찾지 못하는 것 같습니다. – agent154

+0

당신은 당신의 파일이'resources'에 있다고 말했습니다. 이 디렉토리에서 파일을로드 하시겠습니까? 그 외에 자원 디렉토리가'src' 디렉토리 안에 있고이 디렉토리 외부에 있지 않은 것이 확실합니까? (그렇지 않다면 단순히 자원 폴더를'src' 디렉토리로 이동하십시오.) 디렉토리는 다음과 같이 배치해야합니다 : http://d.pr/i/as7K –

1

이 함께 시도 ..

File file = new File(in.nextLine()); 
if(file.exists()){ 
    image = ImageIO.read(file); 
} else { 
    System.out.println("given file " + file.getName() + " not found."); 
} 
+0

콘솔에 메시지가 실제로 출력됩니다. " 파일 MapBig.jpg를 찾을 수 없습니다. " – agent154

+0

당신의 클래스도 같은 폴더에 있습니까? – subash

+0

저는 Eclipse를 사용하고 있습니다.이 패키지는 다양한 패키지와 폴더가있는 상당히 큰 프로젝트입니다."resources "라는 폴더가 있습니다 이미지와 데이터 파일은 나머지 부분은'/ src' 하위 폴더에 있습니다 클래스 파일은 같은 폴더에 있지 않습니다 – agent154

관련 문제