我與類型爲int
,char
,double
,byte
和boolean
並從文件中寫入數據的數據類型。如何檢查是在一個文件
我有寫我的數據到文件的方法。
對於閱讀方法,我將文件的內容放入ArrayList
中,然後將它們轉換爲普通數組。但是爲了做到這一點,我必須知道文件內容的數據類型是什麼。
所以在這裏我的問題是:
- 我如何檢查,看看內容的隨機文件的數據類型是什麼?
我與類型爲int
,char
,double
,byte
和boolean
並從文件中寫入數據的數據類型。如何檢查是在一個文件
我有寫我的數據到文件的方法。
對於閱讀方法,我將文件的內容放入ArrayList
中,然後將它們轉換爲普通數組。但是爲了做到這一點,我必須知道文件內容的數據類型是什麼。
所以在這裏我的問題是:
您可以通過Streams訪問文件。 從文件中讀出的內容取決於用於訪問文件的流類。
Java中有兩個主要組(高達Java 7): 1.「... Reader」類。這裏文件的內容被讀取爲字符序列。 2.「... Stream」類。這裏文件的內容被讀取爲一系列字節。
但是,您可以通過ObjectOutputStream和ObjectInputStream類將文件直接寫入文件或從文件讀取Java對象。有了它們,您可以讀/寫序列化的Java對象和原始數據類型。有了這個,你可以檢查你想要的方式如下:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("filename"));
Object o = ois.readObject();
if (o instanceof)
//... checked
(這僅適用於該文件的內容是序列化的Java對象)
有是做沒有簡單的通用方式這自動。
如果要保留其他信息作爲類型,則必須將其與數據一起存儲。
下面是一些如何存儲類型信息的例子。
使用註釋。始終將相關數據與相關數據一起存儲,例如如果一行上的第一個標記等於"type3"
,則以下數據表示浮點數(例如)。
type1 herecomesthedata1
type2 11011010111011010
type3 55.67
對於使用變量樹的更復雜的數據,使用衆所周知的數據註釋標準作爲JSON或XML。
使用結構。總是按照相同的順序寫入變量,例如一行上的第一個標記始終是一個整數,而下一個始終是浮點數等。讀取數據時使用此信息。
123 43.11
456 78.90
使用Java的內置序列化UTILITES爲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
您好,張貼一些代碼,將更加清晰! – BilalDja 2014-09-29 20:23:42
你不行。你必須記得按照你寫的順序閱讀它們。一旦他們在文件中,他們只是字節。 – Blorgbeard 2014-09-29 20:26:08
看到這個http://stackoverflow.com/questions/17293991/how-to-write-and-read-java-serialized-objects-into-a-file – 2014-09-29 20:34:23