JavaTM Platform
Standard Ed. 6

javax.annotation.processing
인터페이스 Filer



public interface Filer

이 인터페이스는, 주석 프로세서에 의한 새로운 파일의 작성을 지원하고 있습니다. 이 방식으로 작성된 파일은, 이 인터페이스를 구현하고 있는 주석 처리 툴에 인식되어 한층 더 그 툴로 관리될 수도 있습니다. 그처럼 해 작성된 원시 파일과 클래스 파일은, 그러한 내용의 기입에 사용된 Writer 또는 OutputStream 상에서 close 메소드가 불려 가면(자), 이 툴에 의해 처리 대상으로 간주해집니다. 구별되는 파일은 3 종류 있습니다. 원시 파일, 클래스 파일, 및 보조 resource file입니다.

새롭게 작성된 파일은, 2 개의 지원된 위치 (논리 파일 시스템내의 서브 트리)에 배치됩니다. 1 개(살)은 새로운 원시 파일 용, 이제(벌써) 1 개(살)은 새로운 클래스 파일 용입니다. 이러한 위치는,-s-d 등의 플래그를 사용해 툴의 커멘드행으로 지정됩니다. 실제의 새로운 원시 파일의 장소와 새로운 클래스 파일의 장소는, 툴의 특정의 실행으로 구별되는 경우도 있으면, 되지 않는 경우도 있습니다. resource file는 어느 쪽인가의 위치에서 작성할 수 있습니다. 자원의 읽고 쓰기를 실시하는 메소드는, 상대명의 인수를 취합니다. 상대명은, null 도 빈 상태(empty)도 아닌,「/」 으로 단락지어진 일련의 패스 세그먼트(segment)입니다. 「.」 (와)과 「..」 (은)는 무효인 패스 세그먼트(segment)입니다. 유효한 상대명은,RFC 3986 섹션 3.3 의 「path-rootless」규칙에 따릅니다.

파일 작성 메소드는 가변 개수의 인수를 취합니다만, 이것은, 의존관계(dependencies)의 관리 레벨을 향상시키기 위한 힌트로서 「작성원요소」를 툴 인프라스트럭쳐(infrastructure)에 제공할 수 있도록(듯이) 하기 (위해)때문에입니다. 작성원요소란, 주석 프로세서가 새로운 파일의 작성을 시도하는 원인이 된, 형태 또는 패키지 (package-info 파일을 나타낸다)입니다. 예를 들어, 어느 주석 프로세서가, 다음의 코드의 처리 결과적으로, 원시 파일 GeneratedFromUserSource 를 작성하려고 하고 있는 경우,

  @Generate
  public class UserSource {}
 
다음과 같이, 작성 메소드 호출의 일부로서 UserSource 의 형태 요소가 건네받아야 합니다.
      filer.createSourceFile("GeneratedFromUserSource",
                             eltUtils.getTypeElement("UserSource"));
 
작성원요소가 존재하지 않는 경우는, 아무것도 건네줄 필요가 없습니다. 이 정보는, 인크리멘탈 환경에서, 프로세서의 재실행이나 생성된 파일의 삭제의 필요성을 판단하기 위해서(때문에) 사용될 가능성이 있습니다. 비인크리멘탈 환경에서는, 작성원요소의 정보는 무시됩니다.

주석 처리 툴을 실행할 때마다, 지정된 경로명을 가지는 파일이 1 회만 작성됩니다. 이 파일을 시작해 작성할 경우에 파일이 벌써 존재하고 있는 경우, 파일의 낡은 내용은 삭제됩니다. 그 이후, 그 실행동안에 같은 파일의 작성이 시도될 때마다,FilerException 가 throw 됩니다. 같은 형명 또는 패키지명에 대해서 클래스 파일과 원시 파일의 양쪽 모두의 작성이 시도되었을 경우도 같습니다. 툴에의 초기 입력 은, 0 번째의 라운드로 작성된 것이다고 보입니다. 따라서, 이러한 입력의 어느 쪽인가에 대응하는 원시 파일이나 클래스 파일의 작성이 시도되면(자),FilerException 가 throw 됩니다.

일반적으로, 프로세서는, 어떠한 프로세서에 의해 생성된 것이 아닌 기존 파일을, 고의로 덧쓰기하려고 해서는 안됩니다. Filer 는,java.lang.Object 와 같은 기존의 형태에 대응하는 파일을 여는 시도를, 거부할 가능성이 있습니다. 같이 주석 처리 툴의 호출원래는, 생성된 것이 아닌 기존 파일의 덧쓰기가 검출된 프로세서가 시도하도록(듯이), 툴을 고의로 구성 해서는 안됩니다.

프로세서는, 원시 파일이나 클래스 파일에 @Generated 주석을 포함하는 것으로, 그 파일이 생성된 것인 것을 나타낼 수가 있습니다.

「데코레이타」스타일의 패턴을 사용하면, 파일을 덧쓰기하는 것과 같은 효과를 부분적으로 얻을 수 있는 것에 주의해 주세요. 어느 클래스를 직접 변경하는 대신에, 그 클래스를 적절히 설계하는 것으로, 주석 처리에 의해 그 슈퍼 클래스 또는 서브 클래스가 생성되도록(듯이) 합니다. 서브 클래스가 생성되는 경우, 그 친클래스는, public 생성자 은 아니고 팩토리를 사용하도록(듯이) 설계할 수가 있습니다. 그러면, 서브 클래스의 인스턴스만이, 친클래스의 클라이언트에 대해서 제공됩니다.

도입된 버젼:
1.6

메소드의 개요
 JavaFileObject createClassFile (CharSequence  name, Element ... originatingElements)
          새로운 클래스 파일을 작성해, 그것에의 기입을 가능하게 하는 객체를 돌려줍니다.
 FileObject createResource (JavaFileManager.Location  location, CharSequence  pkg, CharSequence  relativeName, Element ... originatingElements)
          기입 대상의 새로운 보조 resource file를 작성해, 거기에 대응하는 파일 객체를 돌려줍니다.
 JavaFileObject createSourceFile (CharSequence  name, Element ... originatingElements)
          새로운 원시 파일을 작성해, 그것에의 기입을 가능하게 하는 객체를 돌려줍니다.
 FileObject getResource (JavaFileManager.Location  location, CharSequence  pkg, CharSequence  relativeName)
          기존의 자원을 읽어내기 위한 객체를 돌려줍니다.
 

메소드의 상세

createSourceFile

JavaFileObject  createSourceFile(CharSequence  name,
                                Element ... originatingElements)
                                throws IOException 
새로운 원시 파일을 작성해, 그것에의 기입을 가능하게 하는 객체를 돌려줍니다. 파일의 이름과 패스 (원시 파일의 루트 출력 장소 에 대한 상대 패스)는 그 파일로 선언되는 형태에 근거합니다. 복수의 형태가 선언되고 있는 경우, 주체의 톱 레벨형 (public 형등)의 이름을 사용할 필요가 있습니다. 원시 파일은, 패키지 주석 등, 패키지에 관한 정보의 포함용으로서 작성할 수도 있습니다. 이름 첨부 패키지의 원시 파일을 작성하려면 ,name 를 패키지명으로 해, 패키지명+「. package-info」 를 지정합니다. 이름 없음 패키지의 원시 파일을 작성하려면 ,「package-info」 를 사용합니다.

파일의 내용을 특정 캐릭터 세트 를 사용해 encode 하고 싶은 경우는, 반환된 객체의 OutputStream 로부터 그 선택된 캐릭터 세트를 가지는 OutputStreamWriter 를 작성할 수 있는 것에 주의해 주세요. 반환된 객체의 Writer 를 직접 사용해 기입을 하는 경우, 그 캐릭터 세트는 구현에 의해 결정됩니다. 주석 처리 툴에는, 이것을 지정하기 위한 -encoding 플래그나 거기에 비슷하는 것이 준비되어 있을 가능성이 있습니다. 그 이외의 경우, 그것은 일반적으로, 플랫폼의 디폴트 인코딩이 됩니다.

후속 처리에서의 에러 발생을 막기 위해서(때문에), 이 실행으로 사용되고 있는 소스 버젼 에, 원시 파일의 내용을 준거시키도록 해 주세요.

파라미터:
name - 이 파일내에서 선언되는 주체의 형태의 정규의 (완전 수식) 이름. 패키지 정보 파일의 경우는, 패키지명+「. package-info」
originatingElements - 이 파일의 작성에 관련지을 수 있는, 원인이 되는 형태 요소 또는 패키지 요소. 생략 가능 또는 null
반환값:
새로운 원시 파일에 기입하기 위한 JavaFileObject
예외:
FilerException - 같은 경로명이 벌써 작성이 끝난 상태인지, 같은 형태가 벌써 작성이 끝난 상태인지, 또는 이름이 형태로서 유효하지 않은 경우
IOException - 파일을 작성할 수 없는 경우

createClassFile

JavaFileObject  createClassFile(CharSequence  name,
                               Element ... originatingElements)
                               throws IOException 
새로운 클래스 파일을 작성해, 그것에의 기입을 가능하게 하는 객체를 돌려줍니다. 파일의 이름과 패스 (클래스 파일의 루트 출력 장소 에 대한 상대 패스)는 기입해지는 형태의 이름에 근거합니다. 클래스 파일은, 패키지 주석 등, 패키지에 관한 정보의 포함용으로서 작성할 수도 있습니다. 이름 첨부 패키지의 클래스 파일을 작성하려면 ,name 를 패키지명으로 해, 패키지명+「. package-info」 를 지정합니다. 이름 없음 패키지의 클래스 파일의 작성은 지원되고 있지 않습니다.

후속 처리에서의 에러 발생을 막기 위해서(때문에), 이 실행으로 사용되고 있는 소스 버젼 에, 클래스 파일의 내용을 준거시키도록 해 주세요.

파라미터:
name - 기입하는 형태의 바이너리명. 패키지 정보 파일의 경우는, 패키지명+「. package-info」
originatingElements - 이 파일의 작성에 관련지을 수 있는, 원인이 되는 형태 요소 또는 패키지 요소. 생략 가능 또는 null
반환값:
새로운 클래스 파일에 기입하기 위한 JavaFileObject
예외:
FilerException - 같은 경로명이 벌써 작성이 끝난 상태인지, 같은 형태가 벌써 작성이 끝난 상태인지, 또는 이름이 형태로서 유효하지 않은 경우
IOException - 파일을 작성할 수 없는 경우

createResource

FileObject  createResource(JavaFileManager.Location  location,
                          CharSequence  pkg,
                          CharSequence  relativeName,
                          Element ... originatingElements)
                          throws IOException 
기입 대상의 새로운 보조 resource file를 작성해, 거기에 대응하는 파일 객체를 돌려줍니다. 이 파일은, 새롭게 작성된 원시 파일이나 바이노리필드와 함께 포함하는 일도, 지원되고 있는 것 외의 장소에 포함할 수도 있습니다. 장소 CLASS_OUTPUTSOURCE_OUTPUT 는 반드시 지원됩니다. 자원에는, 원시 파일 및 클래스 파일로서 일부의 패키지에의 상대적인 경로명을 붙일 수가 있습니다. 대략적으로 말하면, 새로운 파일의 완전 경로명은,location,pkg, 및 relativeName 를 연결한 것이 됩니다.

이 메소드 경유로 작성된 파일은, 그 파일의 완전 경로명이 비록 새로운 원시 파일이나 클래스 파일의 완전 경로명에 대응하고 있는 경우에서도, 주석 처리의 대상으로 해 등록되지 않습니다.

파라미터:
location - 새로운 파일의 위치
pkg - 파일에 이름을 붙일 때의 기준으로서 사용해야 할 패키지. 존재하지 않는 경우는 공문자열
relativeName - 파일의 최종 경로명의 컴퍼넌트
originatingElements - 이 파일의 작성에 관련지을 수 있는, 원인이 되는 형태 요소 또는 패키지 요소. 생략 가능 또는 null
반환값:
새로운 자원에 기입하기 위한 FileObject
예외:
IOException - 파일을 작성할 수 없는 경우
FilerException - 같은 경로명이 벌써 작성이 끝난 상태인 경우
IllegalArgumentException - 지원되어 있지 않은 장소의 경우
IllegalArgumentException - relativeName 가 상대명이 아닌 경우

getResource

FileObject  getResource(JavaFileManager.Location  location,
                       CharSequence  pkg,
                       CharSequence  relativeName)
                       throws IOException 
기존의 자원을 읽어내기 위한 객체를 돌려줍니다. 장소 CLASS_OUTPUTSOURCE_OUTPUT 는 반드시 지원됩니다.

파라미터:
location - 파일의 위치
pkg - 파일을 검색할 때의 기준으로서 사용해야 할 패키지. 존재하지 않는 경우는 공문자열
relativeName - 파일의 최종 경로명의 컴퍼넌트
반환값:
파일을 읽어내기 위한 객체
예외:
FilerException - 같은 경로명이 벌써 기입해 목적으로 열리고 있는 경우
IOException - 파일을 열지 않는 경우
IllegalArgumentException - 지원되어 있지 않은 장소의 경우
IllegalArgumentException - relativeName 가 상대명이 아닌 경우

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.