2010-04-03 9 views
0

Je suis habitué à java.io. * et java.util * mais pas à l'arbre.Java: quelle est la classe de la méthode isBinary?

com.starbase.util 
Class FileUtils 

java.lang.Object 

    | 

    +--com.starbase.util.FileUtils 

Source.

Alors quelle classe dois-je importer d'utiliser la isBinary méthode? Est-ce que je fais "import java.lang.Object;" ou "import java.lang.Object.com.starbase.util.FileUtils;"?

Répondre

2

Vous feriez import com.starbase.util.FileUtils; ou import static com.starbase.util.FileUtils.*. La hiérarchie montre simplement que la classe FileUtils étend Object (comme le font toutes les classes).

Vous devez également avoir le fichier .jar/API pour accéder à cette classe.

EDIT: mise en œuvre autonome Ajouté possible:

Si vous souhaitez implémenter vous-même (j'ai remarqué votre propre réponse 'trivial'), vous pouvez faire quelque chose comme ceci:

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(); 
     } 
    } 

S'il vous plaît note, je n'ai pas testé cela.

Je dois ajouter que c'est l'implémentation triviale. Il existe de nombreux types de fichiers texte qui seraient considérés comme binaires avec ceci. Si vous autorisez le texte à être Unicode et/ou UTF-8 (ou tout autre codage de texte), cela devient rapidement très difficile. Ensuite, vous devez développer quelques types d'heuristiques pour différencier les types de fichiers et cela ne serait pas 100% précis. Donc, cela dépend vraiment de ce que vous essayez de faire avec cela.

1

com.starbase.util.FileUtils n'est pas dans le SDK Java standard, mais à la place le StarTeam SDK que vous devez télécharger pour utiliser la méthode FileUtils#isBinary.

Une fois installé, vous juste besoin d'ajouter:

import com.starbase.util.FileUtils; 

Cependant, si vous ne voulez pas utiliser un SDK tiers, laissez-nous savoir comment isBinary serait utile pour vous et nous pourrions trouver un équivalent Java standard.

Egalement pour clarifier, import.java.lang.Object.com.starbase.util.FileUtils n'est pas une importation valide, vous concaténez deux paquets différents ensemble. Il doit être soit import java.lang.Object soit import com.starbase.util.FileUtils.

+0

en regardant totalement trivial impl. pour savoir si un fichier est binaire, le but n'est pas de faire de l'analyseur. – hhh

+1

Pour autant que je sache, il n'y a pas de moyen facile de vérifier si un fichier est binaire, je n'ai jamais utilisé le StarTeam SDK, mais s'ils ont ce dont vous avez besoin, essayez-le et voyez les résultats. –

1

Vous ne devez jamais importer java.lang.Object, il est importé implicitement et est la classe dont toutes les autres classes sont dérivées. Lorsque vous importez une autre classe, de l'importer sur la base du paquet, il est en Donc, pour la classe que vous voulez l'utiliser serait:.

import com.starbase.util.FileUtils; 
0

Totalement trivial et peut-être plus facile mais très peu fiable!

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

Cela suppose que le nom du fichier correspond vraiment au contenu, mais il existe de nombreux autres types de fichiers pouvant être binaires. La méthode 'isBinary' de cette API vérifie une partie du contenu pour faire la différence entre binaire et texte. –

+2

Je relis l'API javadoc que vous référencez et il déclare "La définition de binaire est que le fichier a au moins un caractère nul (0x0)." Donc, il ouvre et scanne le fichier et s'il trouve un octet 0x0 binaire, il le considère comme un fichier binaire. –