Ich hab ein kleines Problem beim Schreiben einer Datei.
Und zwar es geht um Folgendes:
Es geht um das Spiel X3: Terran Conflict von EGOSOFT. In diesem Spiel sind die Sprachdateien in einzelnen .xml Dateien. Nachdem ich nun eine Mod installierte habe, wurden einige originale SprachIDs überschrieben und somit sind diese auf Englisch.
Nicht so schlimm, aber ich hatte keine Lust jede ID einzeln abzugleichen und anzupassen.
Deswegen wollte ich mir ein kleines Java Programm schreiben, dass das für mich automatisch macht. Man ruft es mit zwei .xml Dateien auf. Einmal mit der originalen deutschen Textdatei und einmal mit der englischen.
Mein Programm funktioniert auch soweit. Aber bei meinen Versuchen wurde meine Datei, die geschrieben werden soll, niemals richtig angelegt.
1. Versuch:
- Originale Textdatei: 3.286.981 chars, 3.382.258 bytes, 32.870 Zeilen
- Textdatei der Mod: 87.415 chars, 91.123 bytes, 1.851 Zeilen
- Erstellte Textdatei: 72.179 chars, 73.728 bytes, 1.542 Zeilen
Wo ist hier mein Fehler? Lasse ich mir alle Zeilen in der Konsole ausgeben, dann funktioniert es ohne Probleme. Das Komische ist auch, dass der Writer mitten in der Zeile aufgehört hat:
2. Versuch:
- Originale Textdatei: 3.286.981 chars, 3.382.258 bytes, 32.870 Zeilen
- Textdatei der Mod: 6.246 chars, 6.648 bytes, 202 Zeilen
- erstellte Datei: 0 chars, 0 bytes, 0 Zeilen
Kann ein BufferedWriter nicht so viele Strings/Chars schreiben?
Und zwar es geht um Folgendes:
Es geht um das Spiel X3: Terran Conflict von EGOSOFT. In diesem Spiel sind die Sprachdateien in einzelnen .xml Dateien. Nachdem ich nun eine Mod installierte habe, wurden einige originale SprachIDs überschrieben und somit sind diese auf Englisch.
Nicht so schlimm, aber ich hatte keine Lust jede ID einzeln abzugleichen und anzupassen.
Deswegen wollte ich mir ein kleines Java Programm schreiben, dass das für mich automatisch macht. Man ruft es mit zwei .xml Dateien auf. Einmal mit der originalen deutschen Textdatei und einmal mit der englischen.
Java:
/* Uebersetzen.java */
import java.io.*;
import read.*;
public class Uebersetzen
{
public static void main (String[] args)
{
String zeile, zeile2;
String[] zeileArr = {}, zeile2Arr = {};
FileReader freader1, freader2;
int i = 1;
try
{
if (args.length == 0)
{
System.out.print("Waehle die 1. Datei: ");
freader1 = new FileReader(Read.getString());
System.out.print("Waehle die 2. Datei: ");
freader2 = new FileReader(Read.getString());
}
else
{
freader1 = new FileReader(args[0]);
freader2 = new FileReader(args[1]);
}
BufferedReader reader1 = new BufferedReader(freader1);
BufferedReader reader2 = new BufferedReader(freader2);
BufferedWriter writer = new BufferedWriter(new FileWriter("0001-test.txt"));
while ((zeile = reader1.readLine()) != null && (zeile2 = reader2.readLine()) != null)
{
i++; // Anzahl der Zeilen
if (zeile.indexOf("<t id=") != -1 && zeile2.indexOf("<t id=") != -1) // Überprüft, ob die Zeile eine ID Zeile ist: <t id="1020101">Königstal</t>
{
System.out.print("I: " + i);
zeileArr = zeile.split("<t id="); // Ergebnis: "1020101">Königstal</t>
zeileArr = zeileArr[1].split(">"); // Ergebnis: "1020101"
zeile2Arr = zeile2.split("<t id=");
zeile2Arr = zeile2Arr[1].split(">");
if (zeileArr[0].equals(zeile2Arr[0])) // Wenn die ID die Gleiche ist, dann verwende die Zeile der deutschen Textdatei
{
System.out.println("ID " + zeileArr[0] + " wird ueberschrieben.");
writer.write(zeile + "\n");
}
else // Ansonsten schreibe die Zeile der 2. Textdatei in die neue Datei
{
System.out.println(" Wird geschrieben");
writer.write(zeile2 + "\n");
}
}
else
{
writer.write(zeile2 + "\n"); // Wenn die Zeile keine ID Zeile ist, dann schreibe die Zeile der 2. Textdatei in die neue Datei
}
}
System.out.println("Fertig\t" + i + " Zeilen");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
1. Versuch:
- Originale Textdatei: 3.286.981 chars, 3.382.258 bytes, 32.870 Zeilen
- Textdatei der Mod: 87.415 chars, 91.123 bytes, 1.851 Zeilen
- Erstellte Textdatei: 72.179 chars, 73.728 bytes, 1.542 Zeilen
Wo ist hier mein Fehler? Lasse ich mir alle Zeilen in der Konsole ausgeben, dann funktioniert es ohne Probleme. Das Komische ist auch, dass der Writer mitten in der Zeile aufgehört hat:
Code:
Zeile 1542 erstellte Datei: <t id="1030810">1168883974,159096
Zeile 1542 Textdatei der Mod: <t id="1030810">1168883974,159096056,1304177310;1307958391,158154743,-1162817375;1280258039,339520687,1156103350</t>
2. Versuch:
- Originale Textdatei: 3.286.981 chars, 3.382.258 bytes, 32.870 Zeilen
- Textdatei der Mod: 6.246 chars, 6.648 bytes, 202 Zeilen
- erstellte Datei: 0 chars, 0 bytes, 0 Zeilen
Kann ein BufferedWriter nicht so viele Strings/Chars schreiben?
Zuletzt bearbeitet: