# 5 Zeilen am Anfang einer TextDatei löschen.



## C4rter (30. August 2007)

Hallo,

wie kann ich die ersten 5 oder auch die ersten 100 Zeilen einer Textdatei löschen? Ich möchte dazu nicht den Rest der Zeilen in eine andere Datei kopieren, da es sich um 25 Millionen Zeilen handelt. Gibt es dazu eine Möglichkeit? Irgendwie sagen mir alle nur, ich soll die restlichen Zeilen in eine neue Datei kopieren, aber bei 25 Millionen is das eher nicht das wahre. Hoffe mir kann einer helfen


----------



## zerix (30. August 2007)

Hallo,

auch wenn es dir nicht gefällt, du wirst dies leider tun müssen. Du kannst das leider nicht mit einem Text-Editor vergleichen, bei dem alles nachrückt, wenn man was löscht. Du wirst ab Zeile 6 (oder wo auch immer du willst) alles neu schreiben müssen.

MFG

zEriX


----------



## Thomas Darimont (30. August 2007)

Hallo,

mit einem RandomAccessFile kann man sowas relativ einfach machen:

```
/**
 * 
 */
package de.tutorials;

import java.io.RandomAccessFile;

/**
 * @author Thomas.Darimont
 * 
 */
public class DeleteFirstLinesExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        RandomAccessFile randomAccessFile = new RandomAccessFile("lines.txt",
                "rw");

        int numberOfLinesToBeSkipped = 5;

        for (int i = 0; i < numberOfLinesToBeSkipped; i++) {
            System.out.println("Skipping: " + randomAccessFile.readLine());
        }

        long sourcePosition = randomAccessFile.getFilePointer();
        long destinationPosition = 0;

        byte[] buffer = new byte[65535];
        long originalLengthInBytes = randomAccessFile.length();

        moveContent(randomAccessFile, sourcePosition, destinationPosition,
                originalLengthInBytes - sourcePosition,buffer);

        randomAccessFile.setLength(originalLengthInBytes - sourcePosition);

        randomAccessFile.close();
    }

    private static void moveContent(RandomAccessFile randomAccessFile,
            long sourcePosition, long destinationPosition, long lengthInBytes, byte[] buffer)
            throws Exception {
        int currentByteCount = 0;
        int bytesRead = 0;
        int bytesWritten = 0;

        long currentSourcePosition = sourcePosition;
        long currentDestinationPosition = destinationPosition;

        randomAccessFile.seek(currentSourcePosition);
        do {
            randomAccessFile.seek(currentSourcePosition);
            currentByteCount = randomAccessFile.read(buffer);
            bytesRead += currentByteCount;
            if (bytesRead > lengthInBytes) {
                currentByteCount = ((int) lengthInBytes) - bytesWritten;
            }
            bytesWritten += currentByteCount;
            randomAccessFile.seek(currentDestinationPosition);
            randomAccessFile.write(buffer, 0, currentByteCount);
            currentSourcePosition += currentByteCount;
            currentDestinationPosition += currentByteCount;
            randomAccessFile.seek(currentSourcePosition);
        } while (bytesWritten < lengthInBytes);
    }
}
```

Aus lines.txt:

```
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10
line 11
line 12
```

Wird dann :

```
line 6
line 7
line 8
line 9
line 10
line 11
line 12
```

Gruß Tom


----------



## C4rter (30. August 2007)

Ah, das sieht interessant aus. Probier ich morgen direkt mal aus. Vielen Dank


----------



## C4rter (31. August 2007)

Hallo,

dein Code läuft super, bei der großen Datei dauert es nur ne Sekunde oder so, dann sind die Zeilen weg. Hab jetzt allerdings noch eine weitere Frage 
Kann man in einer Textdatei in eine bestimmte Zeile etwas zwischenschieben ohne die Datei kopieren zu müssen oder ähnliches. Also, kann ich bei:

1
2
3
5

zwischen der 3 und der 5 eine 4 einschieben?

Vielen Dank

Gruß C4rter


----------



## zerix (31. August 2007)

Hallo,

da muss ich dich wieder enttäuschen. Da wirst du die Datei auch kopieren müssen. Sobald du was entfernen oder musst du die Datei kopieren.

Ok, wenn du mit RandomAccessFile arbeitest, musst du eigentlich erst ab der Stelle an der du was hinzufügst die Datei neu schreiben.

MFG

zEriX


----------

