如何检查文件中的数据类型

时间:2014-09-29 20:22:11

标签: java arrays file arraylist io

我正在编写类型为intchardoublebyteboolean的数据。

我有将数据写入文件的方法。

对于阅读方法,我将文件的内容放入ArrayList,然后将它们转换为普通数组。但是,为了做到这一点,我必须知道文件内容的数据类型是什么。

所以我的问题是:

  • 如何查看随机文件内容的数据类型是什么?

2 个答案:

答案 0 :(得分:0)

您可以通过Streams访问文件。 您从文件中读取的内容取决于您用于访问文件的流类。

Java中有两个主要组(最多Java 7): 1." ...读者"类。这里将文件的内容作为字符序列读取。 2." ...流"类。这里文件的内容被读作一个字节序列。

但是,您可以直接在文件中编写和读取Java对象"通过ObjectOutputStream和ObjectInputStream类。使用它们,您可以读取/写入序列化的Java对象和原始数据类型。有了这个,您可以通过以下方式检查您想要的内容:

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

(仅当文件的内容是序列化的java对象时才有效。)

答案 1 :(得分:0)

没有简单的通用方法可以自动执行此操作。

如果您想保留其他信息作为类型,则必须将其与数据一起存储。

以下是一些如何存储类型信息的示例。

  • 使用注释。始终使用相关数据明确存储类型,例如如果一行上的第一个标记等于"type3",则以下数据表示浮点数(例如)。

    type1 herecomesthedata1
    type2 11011010111011010
    type3 55.67
    

    对于包含变量树的更复杂数据,请使用众所周知的数据注释标准作为JSON或XML。

  • 使用结构。始终以相同的顺序写入变量,例如一行上的第一个标记始终是一个整数,下一个始终是浮点数等。读取数据时使用此信息。

    123 43.11
    456 78.90
    
  • 使用Java的内置序列化实用程序作为ObjectOutputStreamObjectInputStream(仅适用于实现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