【问题标题】:How do you check what type of data is in a file如何检查文件中的数据类型
【发布时间】:2014-11-24 08:03:48
【问题描述】:

我正在将类型为intchardoublebyteboolean 的数据写入文件和文件。

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

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

所以我的问题是:

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

【问题讨论】:

标签: java arrays file arraylist io


【解决方案1】:

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

Java 中有两个主要组(直到 Java 7): 1. "...Reader" 类。这里文件的内容被读取为字符序列。 2.“...流”类。这里文件的内容被读取为一个字节序列。

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    • 使用注释。始终使用相关数据显式存储类型,例如如果一行上的第一个标记等于"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
      

    【讨论】:

      猜你喜欢
      • 2015-10-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 2017-06-18
      相关资源
      最近更新 更多