2010-04-03 6 views
0

나는 * 및 java.util의 java.io 패키지에 익숙한입니다 *하지만 트리에 :.자바 : isBinary 메서드의 클래스는 무엇입니까?

com.starbase.util 
Class FileUtils 

java.lang.Object 

    | 

    +--com.starbase.util.FileUtils 

Source.

그래서 클래스 내가 isBinary-방법을 사용하여 가져와야합니다? "import java.lang.Object;"를 수행합니까? 또는 "import java.lang.Object.com.starbase.util.FileUtils;"?

답변

2

당신은 import com.starbase.util.FileUtils; 또는 import static com.starbase.util.FileUtils.* 할 것입니다. 계층 구조는 단지 클래스 FileUtils이 모든 클래스와 마찬가지로 Object을 확장한다는 것을 보여줍니다.

또한이 클래스에 액세스하려면 .jar 파일/API가 있어야합니다.

편집 : 추가 가능한 독립형 구현 :

자신 (I 자신의 '사소한'답을 발견),이 같은 것을 할 수이를 구현하려면 :

public static boolean isBinary(String fileName) throws IOException { 
     return isBinary(new File(fileName)); 
    } 

    public static boolean isBinary(File file) throws IOException { 
     InputStream is = new FileInputStream(file); 
     try { 
      byte[] buf = new byte[4096]; 
      int bytesRead; 
      while ((bytesRead = is.read(buf)) >= 0) 
      { 
       for (int i = 0; i < bytesRead; i++) { 
        if (buf[i] == (byte) 0) 
         return true; 
       } 
      } 

      return false; 
     } finally { 
      is.close(); 
     } 
    } 

를하시기 바랍니다 참고, 나는 이것을 테스트하지 않았습니다.

이것이 간단한 구현이라고 덧붙여 야합니다. 바이너리로 간주되는 많은 종류의 텍스트 파일이 있습니다. 텍스트를 유니 코드 및/또는 UTF-8 (또는 다른 텍스트 인코딩)으로 허용하려면이 작업이 빨리 어려워집니다. 그렇다면 파일의 종류를 구별하기위한 몇 가지 종류의 경험적 방법을 개발해야하며 100 % 정확하지는 않습니다. 따라서, 이것은 당신이 무엇을하려고하는지에 달려 있습니다.

1

com.starbase.util.FileUtils은 표준 패키지 Java SDK가 아니고 대신 FileUtils#isBinary 메서드를 사용하려면 다운로드해야합니다. 타사 SDK를 사용하지 않으려면 우리가 isBinary 당신에게 도움이 될 것입니다 방법을 알려 주시기,

import com.starbase.util.FileUtils; 

을하지만 우리는 찾을 수 :

설치가 완료되면, 당신은 추가해야합니다 표준 Java에 상응하는 것.

또한 명확히하기 위해 import.java.lang.Object.com.starbase.util.FileUtils은 유효한 가져 오기가 아니므로 두 개의 다른 패키지를 함께 연결해야합니다.

import java.lang.Object 또는 import com.starbase.util.FileUtils이어야합니다.

+0

완전히 사소한 것입니다. 파일이 바이너리인지 여부를 알기 위해 파서를 만드는 것이 아닙니다. – hhh

+1

필자가 아는 한, 파일이 바이너리인지를 확인하는 쉬운 방법이 없다. StarTeam SDK를 한번도 사용해 본 적이 없지만, 필요한 것을 가지고 있다면, 그것을 시험해보고 어떤 결과를 얻는 지보십시오. –

1

java.lang.Object를 가져올 필요가 없습니다. 암시 적으로 가져 오며 다른 모든 클래스가 파생되는 클래스입니다. 다른 클래스를 가져올 때, 당신은에서의 패키지를 기반으로 가져올 당신이 될 것이다 사용할 클래스 그래서 :.

import com.starbase.util.FileUtils; 
0

완전히 사소하고 가장 쉽지만 매우 신뢰할 수 없습니다!

if(filename.toLowerCase().trim().endsWith(".bin")) 
    return "Binary"; 
+0

그 내용은 파일 이름이 실제로 내용과 일치한다고 가정하지만 이진 파일 일 수는 많습니다. 이 API의 isBinary 메소드는 바이너리와 텍스트를 구별하기 위해 일부 내용을 검사합니다. –

+2

참조하는 API javadoc을 다시 읽었으며 "이진 정의는 파일에 적어도 하나의 null (0x0) 문자가 있음을 나타냅니다." 따라서 파일을 열고 스캔하고 0x0 바이너리 인 바이트를 찾으면 바이너리 파일로 간주합니다. –

관련 문제