Schreiben eine lange (primitiven Typ) auf eine Datei in Java
Hallo alle,
Ich habe ein array von langen, ich möchte schreiben in eine .txt Datei, die kann ich später öffnen in gedit (eine Zahl pro Zeile). Ich bekomme diese Werte durch die Verwendung einer Subtraktion von zwei Instanzen von System.currentTimeMillis().
Ich verwende den folgenden code:
BufferedWriter out = new BufferedWriter(new FileWriter("latency.txt"));
for (int i = 0; i < USER_LIMIT; ++i) {
out.write(latency[i] + "\n");
}
out.close();
Wenn man auf die Datei, sehe ich:
0
1
1
0
Glaube ich, dass die Verkettung von Strings umgewandelt, die lange in einen integer. Wenn ich den DataOutputStream, dann kann ich nicht Lesen es wieder mit gedit oder alle Editor/text-editor, es sieht aus wie Müll (ich glaube, es ist schreiben von bytes).
Würde jemand bitte lassen Sie mich wissen, wie kann ich das beheben mein problem bitte?
Vielen Dank!
latency[i]
?Können Sie uns sagen, was die ersten paar zahlen in das array sein soll?
Die String-Verkettung nicht konvertieren
long
in eine int
.Eigentlich wollte ich das nicht überprüfen Sie den Wert der Latenz[ich], und ich sollte (mein schlechtes). Ich werde schauen an es jetzt. Ich nahm an, weil das system liefert Millisekunden, 1 war einfach zu klein. Lassen Sie mich überprüfen Sie die Werte.
Wirklich, das sollte die erste, was Sie geprüft!
InformationsquelleAutor Jary | 2011-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nichts falsch mit Ihrem code. Was denken Sie, ist in
latency
... nicht.produziert:
Wenn Sie ein problem mit code wie diesem, ist es oft vorteilhaft schreiben Sie eine kleine test-Fall, um das problem einzugrenzen.
Keine Sorge. Wir haben alle gesehen, den Boden zumindest ein paar Kaninchen Löcher 🙂
InformationsquelleAutor Brian Roach
Gegossen, um eine Lange und verwenden Sie toString:
Oder benutzen Sie einfach die statische toString:
latency[i]
ist schon einlong
sollte dies machen null Unterschied.Es ist nichts falsch mit seinem code. Seine data auf der anderen Seite ...
InformationsquelleAutor Ian Dallas
Wenn Sie DataOutputStream schreiben lange ist es mit einer anderen Codierung Ihrer Daten als gedit versteht.
Einer der häufigsten Kodierungen für text-Dateien ist ASCII. Mit dieser jedes byte entspricht einem Zeichen in einer Tabelle. Diese Tabelle hat 128 Zeichen. Wenn Sie schreiben eine Zeichenkette in eine Datei, die mit Java die Art und Weise Sie es tun dies ist, was passiert ist und gedit versteht, dass die Kodierung. Wenn Sie die Konvertierung von long in einen string die maximale Größe, die eine lange sein kann, würde wie folgt Aussehen: 9223372036854775807. Das würde bis zu 19 bytes.
Lange in Java 64 bit oder 8 Byte. Wenn Sie DataOutputStream lange geschrieben wird, um die Datei als 8 bytes. Ein text-editor wie gedit nicht diese Codierung verstehen.
Was die Dinge verkompliziert, ist Kodierungen wie UTF-8.
InformationsquelleAutor Sarel Botha
Brauchen Sie nicht zu fügen Sie den Zeilenumbruch, um die Nummer, so dass Sie können brechen Sie auseinander, und vermeiden Sie dieses problem. Versuchen Sie dies:
Ich bekomme die folgende Fehlermeldung in diesem Fall: Die Methode write(int) im Typ BufferedWriter ist nicht anwendbar für die Argumente (lang) (Eclipse)
Was meinst du?
Oh, na dann müssen Sie gegossen, die lange auf eine
int
oder verwenden Sie ein anderes Druckverfahren. Mein wirklicher Punkt war, dass Sie nicht brauchen, hängen Sie den Zeilenumbruch, um die Nummer, bevor Sie es drucken.Es sollte kein problem mit der string-Verkettung Betrieb. Was ist mehr, Ihre obige code wird nicht kompiliert (die OP ist gerade gefunden).
InformationsquelleAutor Nate W.