簡體   English   中英

用Java將長型(原始類型)寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM