EADever Ответов: 2

JAVA как определить, что двоичный файл содержит нулевые значения?


Привет, я хочу сделать java-код, который знает, что двоичный файл имеет нулевое значение
значение файла, подобное этому, даст логическое значение false:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


И такое значение файла даст логическое значение true:
30 09 02 20 09 02 F0 08 02 D4 08 02 A4 08 06 60 08 01 B8 15 01 F4 15 01 F4 15 01 2C 15 01 64 14 01 64 14 01 98 13 01 34 13 01 D0 12 01 6C 12 01 A4 11 01 DC 10 01 14 10 01 80 0E 01 B8 0D 01 54 0D 01 F0 0C 01 8C 0C 01 C0 0B 01 F8 0A 01 30 0A


Что я уже пробовал:

Чат с использованием Java.Ио.Файл

переменная
File landMapH32File


состояние но не работает:
if (landMapH32File.exists() && landMapH32File.length() > 0) {}

это условие вернет true, даже если файл содержит нулевые значения. Он должен вернуть false.

2 Ответов

Рейтинг:
19

Richard MacCutchan

Конечно, он вернется истинным. Вы только проверяете, существует ли файл и содержит ли он что-либо. Вам нужно прочитать содержимое и найти ненулевые байты.


EADever

Можете ли вы дать пример кода для чтения содержимого и поиска ненулевых байтов?

EADever

public static void main (String[] args) вызывает исключение IOException {
FileInputStream fis = new FileInputStream(новый файл("c:\\arena_l_lobby_land_map.h32"));
int iByteCount = FIS. read();
if (iByteCount == -1)
Системы.из.код println("поток не пуст");
еще
Системы.из.код println("поток пуст");
}

это правильно?

Richard MacCutchan

Нет, вам нужно прочитать каждый байт и найти первый, который содержит значение больше нуля.

Рейтинг:
0

EADever

Спасибо @Richard MacCutchan за предложение:

этот код работает для меня:

public static void main(String[] args) throws IOException {

		File file = new File("c:\\arena_l_lobby_land_map.h32");
        FileInputStream in = null;

        try {
            in = new FileInputStream(file);
            int c;
            boolean d = false;

            while ((c = in.read()) != -1) {
            	if (c > 0) {
            		d = true;
            	}
            }
            System.out.println(d);
        } finally {
            if (in != null) {
                in.close();
            }
        }
    }