我正在编写类型为int
,char
,double
,byte
和boolean
的数据。
我有将数据写入文件的方法。
对于阅读方法,我将文件的内容放入ArrayList
,然后将它们转换为普通数组。但是,为了做到这一点,我必须知道文件内容的数据类型是什么。
所以我的问题是:
答案 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的内置序列化实用程序作为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