2012-09-10 2 views
1

안녕하세요,이 모든 것을 읽을만큼 친절한 모든 사람들.압축 파일을 감지하십시오 java

임, 나는 그것을 만들지 못했지만 파일을 추가 할 수 있다는 문제를 해결했지만 추가 된 파일이 사람이 알 수없는 형식으로 압축되지 않도록 유효성을 검사하려고합니다. 사람들이 zip 파일이나 rar 또는 7z 또는 gz 파일을 추가 할 수 있기를 원합니다.

누구나 아이디어를 도울 수 있습니까?

미리 감사드립니다.

* 편집 : IT 학생이 사용하는 프로그램으로 소스 코드의 파일 (.java, .class, .php, .doc, .mdb)을 추가하고 경로가 문자열에 저장되며 끝으로, 프로그램이 파일을 압축하고 교사에게 보내면 강사가 압축 파일이나 압축 파일을받지 않으려한다는 것을 알기 때문에 그것이 유효성 검사의 이유입니다.

+0

이 질문을 확인하시기 바랍니다이 같은 것 [http://stackoverflow.com/questions/4148987/checking-if http://stackoverflow.com/questions/4148987/checking-if-a-stream-is-a- : [1] [1] -a-스트림-A-지퍼 파일 zip 파일 – bhatanant2

+0

어디로 파일을 추가 하시겠습니까? 그것은 실제 파일입니까? 파일의 처음 몇 바이트를 확인할 수 있습니까? 예 : Zip 파일은 PK로 시작합니다 – gigadot

+0

텍스트 파일 만 갖기 원하는 목적입니까? 압축되지 않은 이진 파일을 추가 할 수 있습니까? 압축 된 파일을 감지하는 일반적인 방법은 파일을 압축하여 파일 크기가 더 작은 지 확인하는 것입니다. 파일이 trival이 아니지만 더 작지 않으면 이미 압축되어 있습니다. 예 : PNG 파일이 압축됩니다. –

답변

4

기본적으로 파일의 바이트에 유닉스 명령 type과 동일한 Java 명령을 사용합니다. 대부분의 파일에는 지문이 포함되어있어 다른 프로그램에 어떤 파일 유형인지에 대한 힌트를 제공합니다. 이 지문은 일반적으로 "매직 넘버"

7zip - '7', 'z', 0xBC, 0xAF, 0x27, 0x1C 
gzip - 0x1F, 0x8B 

하나 (불완전) list of magic numbers can be found here이라고합니다.

일부 파일에는 마법 번호가 없으므로 파일에서 다른 일반적인 항목을 찾아보아야합니다. 의심스러운 유형의 파일임을 강력히 암시합니다.

파일 이름 확장명을 사용하면 결국 모든 사람이 확장명을 바꾸게됩니다.

1

가장 많이 손상된 파일 유형은 처음에는 "매직 넘버", 파일 유형 (압축 파일뿐만 아니라 이미지 등)을 나타내는 몇 바이트가 있습니다. 알려진 파일 형식과 비교하여 파일 내용을 확인할 수 있습니다. 당신은 "마술 번호 파일 유형"에 Google 수 있습니다.

0

FWIW, 파일이 gzip으로 압축되어있는 경우이 기능 검사 :

public static boolean isGzipped(File f) { 
    InputStream is = null; 
    try { 
     is = new FileInputStream(f); 
     byte [] signature = new byte[2]; 
     int nread = is.read(signature); //read the gzip signature 
     return nread == 2 && signature[ 0 ] == (byte) 0x1f && signature[ 1 ] == (byte) 0x8b; 
    } catch (IOException e) { 
     Log.x(e); 
     return false; 
    } finally { 
     Closer.closeSilently(is); 
    } 
} 

See Closer.closeSilently() here.

관련 문제