2009-06-05 2 views
1

우선은 여기에 작은 코드 제공합니다 : 여기Java에서 HTTP 404에 특수 문자가 포함 된 file : // URL을 가져 오는 것을 방지하려면 어떻게해야합니까?

String path = "".equals(url.getPath()) ? "/" : url.getPath(); 
java.io.File f = new java.io.File(path); 

if (!f.exists()) { 
    this.code = 404; // http Not Found 
    return; 
} 

를 해당 URL의 형태는 java.net.URL이며, 그 값은이 형식은 :

file:///directory1/directory2.../filename 

위의 코드가의 90 %를 작동을 일반적인 URL을 처리하는 시간이지만 파일 이름에 특수 문자가 있으면 실패합니다. 예 :

/tmp/Marissafolli/Receptionist/Administrative Assistant/Marissa's Resume.txt.txt 

이러한 URL은 "404"코드가 있다고하더라도이를보고합니다. 다음 버전은 그 특별한 경우에 작동합니다

java.io.File f = new java.io.File(url.toURI()); 

그러나 url.toURI()은 J2SE 1.5.0 만입니다. 그래서 첫 번째 버전을 사용해야합니다. 어떻게 작동시킬 수 있습니까?

+0

원본 URL의 출처는 어디입니까? – objects

답변

2

이것은 버그가 아니며 유효한 URL이 아닙니다.

처음에는 escape 공백을 % 20에 넣어야합니다. 나는 아포스트로피로 무엇을하는지 모른다. This blog은 % 27이되어야한다고 제안합니다. 그것을 시도하고 볼 수 있습니다.

아니면 단지 java.net.URLEncoder을 사용해보십시오.

+0

URLEncoder는 ": //"문자를 포함하여 * 모든 항목을 인코딩하기 때문에 사용할 수 있다고 생각지 않습니다. Java 자체에는 필요한 인코딩을 수행하는 클래스가 없습니다. – Eddie

+0

맞을지도 몰라, 에디. 나는 그것을 직접 시도하지 않았다. API에서 도움이 될만한 것을 뿌리 뽑고있었습니다. 아마도 그것은 좋은 생각이 아니었을 것입니다. – duffymo

0

URI를 먼저 구성한 다음 toURL() 메서드를 호출하는 것이 좋습니다. 더 많은 정보 here.

[UPDATE] URI 클래스가 인코딩을 처리하기 때문에 File의 생성자에서 URI를 직접 사용하지 않는 것이 좋습니다.

관련 문제