Java, RandomAccessFile, Zeile kopieren in andere Textdatei

Killuminati

Grünschnabel
Ich möchte das alle Zeilen, abgesehen von der mit dem entsprechendem Inhalt (hier: "Text2", wobei nicht die Position entscheident ist), in eine neue Textdatei geschrieben werden.
Leider funktioniert das nicht, wie man unten sieht. Ich vermute das der Fehler an ".readLine()" liegt (API: Reads the next line of text from this file.)
Hab mir die anderen Beiträge zu RandomAccessFile und dem dortigen Aufbau angesehen, allerdings fand ich es jetzt zu umständlich die Bytes hin und her zu schieben... das muss doch auch einfacher gehen.
Vielleicht hat jeman einen Tipp für mich.
Greetinx,
Killuminati


Code:
import java.io.RandomAccessFile;


public class WriteToFiles
{
	public static void main(String[] args) throws IT_EX
	{
		try
		{
			String path = "C:/test1.txt";
			File file = new File(path);
			RandomAccessFile in = new RandomAccessFile(path, "r");
			RandomAccessFile out = new RandomAccessFile(
					"C:/test2.txt", "rw");

			while (in.readLine() != null)
			{
				IT.INFO("for"); // System.out.println()
				if (in.readLine() != "TEXT2")
				{
					IT.INFO("if"); // System.out.println()
					out.writeBytes(in.readLine());
				}
			}
			in.close();
			out.close();
		}
		catch (Throwable T)
		{

		}
	}
}

test1.txt (Quelldatei)
Code:
Text1
Text2
Text3
Text4

test2.txt (Zieldatei)
Code:
Text3
Wo ist der Rest? :)

So soll die Zieldatei aussehen...
Code:
Text1
Text3
Text4
 
Du bewegst den Reader bei jedem in.readLine() eine Zeile weiter... Dadurch überspingst du welche...

richtig wäre:
Java:
import java.io.File;
import java.io.RandomAccessFile;


public class WriteToFiles
{
	public static void main(String[] args) 
	{
		try
		{
			String path = "C:/test1.txt";
			File file = new File(path);
			RandomAccessFile in = new RandomAccessFile(path, "r");
			RandomAccessFile out = new RandomAccessFile(
					"C:/test2.txt", "rw");
			String s;
			while ((s = in.readLine()) != null)  // die Zeile in s zwischenspeichern
			{
				if (!s.equals("Text2"))  // String vergleicht man IMMER mit s1.equals(s2) und 
                                //TEXT2 hätte er wohl nicht gefunden, sonst müstest du equalsIgnoreCase nehmen.
				{
					out.writeBytes(s+"\r\n"); //"\r\n" angehängt für einen Zeilenumbuch im Windowsformat (CRLF)
				}
			}
			in.close();
			out.close();
		}
		catch (Throwable T)
		{

		}
	}
}
 
Zuletzt bearbeitet:
Zurück