Java: что такое класс для isBinary-метода? - PullRequest
0 голосов
/ 03 апреля 2010

Я привык к java.io. * и java.util. * Но не к дереву:

com.starbase.util
Class FileUtils

java.lang.Object

  |

  +--com.starbase.util.FileUtils

Источник.

Так какой класс я должен импортировать, чтобы использовать метод isBinary? Должен ли я "импортировать java.lang.Object;" или "импортировать java.lang.Object.com.starbase.util.FileUtils;"?

Ответы [ 4 ]

2 голосов
/ 03 апреля 2010

Вы бы сделали import com.starbase.util.FileUtils; или import static com.starbase.util.FileUtils.*. Иерархия просто показывает, что класс FileUtils расширяется Object (как и все классы).

Вам также необходим файл / API .jar для доступа к этому классу.

РЕДАКТИРОВАТЬ : Добавлена ​​возможная автономная реализация:

Если вы хотите реализовать это самостоятельно (я заметил ваш собственный «банальный» ответ), вы можете сделать что-то вроде этого:

    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 голос
/ 03 апреля 2010

Вам никогда не придется импортировать java.lang.Object, он импортируется неявно и является классом, из которого происходит любой другой класс. Когда вы импортируете другой класс, вы импортируете его на основе пакета, в котором он находится. Поэтому для класса, который вы хотите использовать, он будет:

import com.starbase.util.FileUtils;
1 голос
/ 03 апреля 2010

com.starbase.util.FileUtils не входит в стандартный пакет 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.Object, либо import com.starbase.util.FileUtils.

0 голосов
/ 03 апреля 2010

Совершенно тривиально и, возможно, проще, но очень ненадежно!

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