2010-04-03 58 views
0

我习惯java.io. *和java.util *而不是树:Java: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来访问这个类。

编辑:添加的可能独立实现:

如果你想自己实现(我发现自己的“小事”的答案),你可以做这样的事情:

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

请请注意,我没有测试过这个。

我应该补充说这是一个简单的实现。有很多类型的文本文件会被认为是二进制文件。如果您允许文本为Unicode和/或UTF-8(或其他文本编码),那么这很快就会变得非常困难。然后你需要开发一些启发式来区分各种文件,这不是100%准确的。所以,这实际上取决于你想要做什么。

1

​​不在标准的打包Java SDK中,而是在您需要下载的StarTeam SDK中,以便使用FileUtils#isBinary方法。

一旦安装,你只需要添加:

import com.starbase.util.FileUtils; 

但是,如果你不希望使用第三方SDK,让我们知道如何isBinary将有助于你和我们可以找到一个标准的Java等价物。

而且澄清,import.java.lang.Object.com.starbase.util.FileUtils是不是一个有效的导入,您是连接两个不同的封装在一起。

它,必须为import java.lang.Objectimport com.starbase.util.FileUtils

+0

寻找完全琐碎IMPL。要知道一个文件是否是二进制文件,目的不是制作解析器。 – hhh 2010-04-03 16:59:31

+1

据我所知,并不是一种简单的方法来检查文件是否是二进制文件,我从未使用过StarTeam SDK,但如果他们有你需要的,试试看看你得到了什么结果。 – 2010-04-03 17:07:58

1

你从来没有进口java.lang.Object中,它隐含的进口,并且是所有其他类从派生的类。当您导入另一个类,您导入基于它在包所以对于类,你想用它应该是:

import com.starbase.util.FileUtils; 
0

完全微不足道,也许最简单的,但是非常不可靠的!

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

假定文件名与内容真正匹配,但还有很多其他类型的文件可以是二进制文件。 API中的isBinary方法将检查一些内容以区分二进制文本和文本。 – 2010-04-03 17:09:31

+2

我重读了您引用的API javadoc,并指出“二进制文件的定义是文件至少有一个空(0x0)字符。”所以它打开并扫描文件,如果它找到一个二进制为0x0的字节,它就认为它是一个二进制文件。 – 2010-04-03 17:10:34