Лучший способ обнаружить, если поток заархивирован в Java

К сожалению, нет «предыдущего» селектора, но вы можете , возможно, получить тот же эффект, используя позиционирование (например, float right). Это зависит от того, что вы пытаетесь сделать.

В моем случае я хотел получить первую 5-звездочную рейтинговую систему CSS. Мне нужно было бы покрасить (или поменять значок) предыдущих звезд. Если плавать каждый элемент вправо, я по сути получаю тот же эффект (html для звезд, таким образом, должен быть записан «назад»).

Я использую FontAwesome в этом примере и заменяю между юникодами fa -star-o и fa-star http://fortawesome.github.io/Font-Awesome/

CSS:

.fa {
    display: inline-block;
    font-family: FontAwesome;
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* set all stars to 'empty star' */
.stars-container {
    display: inline-block;      
}   

/* set all stars to 'empty star' */
.stars-container .star {
    float: right;
    display: inline-block;
    padding: 2px;
    color: orange;
    cursor: pointer;

}

.stars-container .star:before {
    content: "\f006"; /* fontAwesome empty star code */
}

/* set hovered star to 'filled star' */
.star:hover:before{
    content: "\f005"; /* fontAwesome filled star code */
}

/* set all stars after hovered to'filled star' 
** it will appear that it selects all after due to positioning */
.star:hover ~ .star:before {
    content: "\f005"; /* fontAwesome filled star code */
}

HTML: (40)

JSFiddle: http://jsfiddle.net/andrewleyva/88j0105g/

19
задан Fedearne 27 November 2009 в 14:10
поделиться

4 ответа

Магические байты для формата ZIP составляют 50 4B . Вы можете протестировать поток (используя mark и reset - вам может потребоваться буфер ), но я не ожидал бы, что это будет 100% надежный подход. Невозможно отличить его от текстового файла в кодировке US-ASCII, который начинается с букв PK .

Лучший способ - предоставить метаданные о формате содержимого. перед открытием потока, а затем обработайте его соответствующим образом.

22
ответ дан 30 November 2019 в 02:01
поделиться

И начиная с .zip и начиная с .xlsx наличие того же Магического числа, я не мог найти действительный zip-файл (если переименовано).

Так, я использовал Apache Tika для нахождения точного типа документа.

, Даже если переименованный в тип файла как zip, это находит точный тип.

Ссылка: https://www.baeldung.com/apache-tika

0
ответ дан 30 November 2019 в 02:01
поделиться

Вы можете проверить, что первые четыре байта потока - это подпись заголовка локального файла , которая запускает заголовок локального файла , который обрабатывает каждый файл в ZIP-файл , как показано в спецификации здесь , должен быть 50 4B 03 04 .

Небольшой тестовый код показывает, как это работает:

byte[] buffer = new byte[4];

try {
    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("so.zip"));
    ZipEntry ze = new ZipEntry("HelloWorld.txt");
    zos.putNextEntry(ze);
    zos.write("Hello world".getBytes());
    zos.close();

    FileInputStream is = new FileInputStream("so.zip");
    is.read(buffer);
    is.close();
}
catch(IOException e) {
    e.printStackTrace();
}

for (byte b : buffer) { 
    System.out.printf("%H ",b);
}

Получил этот вывод:

50 4B 3 4 
6
ответ дан 30 November 2019 в 02:01
поделиться

Не очень элегантно, но надежно:

Если поток можно прочитать через ZipInputStream , его следует заархивировать.

5
ответ дан 30 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: