2014-09-29 1 views
2

Я пишу данные с типами, как int, char, double, byte и boolean и из файлов.Как проверить, какой тип данных находится в файле

У меня есть методы, которые записывают мои данные в файлы.

Для метода чтения у меня есть содержимое файлов, помещенных в ArrayList, а затем перенося их в простой массив. Однако для этого я должен знать, что такое тип данных содержимого файла.

Так что мой вопрос здесь:

  • Как проверить, что тип данных содержимого случайного файла?
+0

Привет, разместить код, который будет более ясно! – BilalDja

+4

Вы не можете. Вы должны помнить, что читаете их в том порядке, в котором вы их написали. Как только они находятся в файле, это всего лишь байты. – Blorgbeard

+1

см. Это http://stackoverflow.com/questions/17293991/how-to-write-and-read-java-serialized-objects-into-a-file –

ответ

0

Доступ к файлам осуществляется через Потоки. То, что вы читаете из файла, зависит от класса stream, который вы используете для доступа к файлу.

В Java есть две основные группы (до Java 7): 1. Классы «... Reader». Здесь содержимое файла читается как последовательность символов. 2. Классы «... Стрим». Здесь содержимое файла считывается как последовательность байтов.

Однако вы можете писать и читать объекты Java непосредственно из файла и непосредственно из него через классы ObjectOutputStream и ObjectInputStream. С ними вы можете читать/писать сериализованные Java-объекты и примитивные типы данных. При этом вы можете проверить, что вы хотите, следующим образом:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("filename")); 
Object o = ois.readObject(); 
if (o instanceof) 
//... checked 

(. Это работает только, если содержимое файла упорядочиваются объекты Java)

0

Там же нет нет простой универсальный способ сделать это автоматически.

Если вы хотите сохранить дополнительную информацию в качестве типа, вам необходимо будет сохранить его вместе с данными.

Вот несколько примеров того, как вы можете хранить информацию о типе.

  • Использование аннотаций. Всегда сохраняйте тип явно со связанными данными, например. если первый токен в строке равен "type3", то следующие данные представляют собой число с плавающей запятой (например).

    type1 herecomesthedata1 
    type2 11011010111011010 
    type3 55.67 
    

    Для более сложных данных с деревьями переменных используется известный стандарт аннотации данных как JSON или XML.

  • Использование структуры. Всегда иметь переменные, написанные в том же порядке, например. первый токен в строке всегда является целым числом, а следующий - всегда плавающей точкой и т. д. Используйте эту информацию при чтении данных.

    123 43.11 
    456 78.90 
    
  • Использование Java встроенный в сериализации утилитами в ObjectOutputStream и ObjectInputStream (работает только на примитивных типов и объектов, которые реализуют java.io.Serializable).

    Пример (с использованием структуры для определения типа):

    int i = 5; 
    double d = 7.3; 
    
    try (ObjectOutputStream out = new ObjectOutputStream(
            new FileOutputStream("test.dat"))) { 
        out.writeInt(i); 
        out.writeDouble(d); 
    } catch (IOException e) { 
        System.err.println("An error occured writing to file"); 
    } 
    
    i = 0; 
    d = 0.0; 
    
    try (ObjectInputStream in = new ObjectInputStream(
            new FileInputStream("test.dat"))) { 
        i = in.readInt(); 
        d = in.readDouble(); 
    } catch (IOException e) { 
        System.err.println("An error occured reading from file"); 
    } 
    
    System.out.println("i = " + i + " and d = " + d); // 5 and 7.3 
    
Смежные вопросы