[英]Writing a long (primitive type) to a file in Java
大家好,
我有一個很長的數組,我想寫入一個.txt文件,以后可以在gedit中打開(每行一個數字)。 我通過減去System.currentTimeMillis()的兩個實例來獲得這些值。
我使用以下代碼:
BufferedWriter out = new BufferedWriter(new FileWriter("latency.txt"));
for (int i = 0; i < USER_LIMIT; ++i) {
out.write(latency[i] + "\n");
}
out.close();
查看文件時,我確實看到:
0
1
1
0
我相信字符串串聯將long轉換為整數。 如果使用DataOutputStream,則無法使用gedit或任何記事本/文本編輯器將其讀回,它看起來就像垃圾(我相信它在寫字節)。
有人能讓我知道如何解決我的問題嗎?
非常感謝你!
您的代碼沒有錯。 您認為latency
中沒有...
public static void main(String[] args) throws IOException
{
long[] latency = { 123456789000L, 234567890000L, 345678901000L };
BufferedWriter out = new BufferedWriter(new FileWriter("latency.txt"));
for (int i = 0; i < 3; ++i) {
out.write(latency[i] + "\n");
}
out.close();
}
生產:
$ more latency.txt
123456789000
234567890000
345678901000
當您遇到這樣的代碼問題時,編寫一個小的測試用例來縮小問題范圍通常是有益的。
強制轉換為Long並使用toString:
out.write(((Long)latency[i]).toString() + "\n");
或者只使用靜態toString:
out.write(Long.toString(latency[i]) + "\n");
當您使用DataOutputStream編寫一個long時,它使用的數據編碼與gedit所理解的不同。
文本文件最常用的編碼之一是ASCII。 每個字節代表一個表中的字符。 該表有128個字符。 當您使用Java方式將字符串寫入文件時,這就是正在發生的事情,而gedit可以理解這種編碼。 如果將long轉換為字符串,則long的最大大小可能如下所示:9223372036854775807。這將占用19個字節。
Java中的long是64位或8個字節。 使用DataOutputStream時,很長一段時間會以8個字節的形式寫入文件。 像gedit這樣的文本編輯器無法理解這種編碼。
使事情更加復雜的是諸如UTF-8的編碼。
您無需在數字后添加換行符,因此可以將它們分開並避免此問題。 嘗試這個:
for ( int i = 0; i < USER_LIMIT; ++i ) {
out.write( String.valueOf(latency[i]) ); // Or Long.toString(long)
out.write( '\n' ); // Or simply out.newLine()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.