Hi an alle!
Ich habe eine Klasse, mit der ich die Möglichkeit habe, die Anzahl der ersten Zeilen löschen zu können, z.B.
ich möchte die ersten 5 Zeilen löschen. Siehe unten den Source-Code:
Mein Wunsch ist, wie kann die Anzahl der Zeilen ermitteln, wenn ich die txt-Datei auf 50 MB begrenzen möchte und meine txt-Datei ist z.B. 160 MB groß? Ich will die Anzahl der Zeilen nicht selber bestimmen, sondern es soll ja durch die Datei-Größe berechnet werden oder habt ihr vielleicht eine andere Idee! Die Text-Datei sieht so aus:
Nach dem Löschen darf es nicht so aussehen, sondern entweder komplette Zeile oder gar nichts löschen:
Man kann ja per Schleife jede Zeile durchgehen und nach der Schleife mit randomAccessFile.getFilePointer() die Größe ermitteln! Da komme ich irgendwie nicht weiter!
Gruß
Iron Monkey
Ich habe eine Klasse, mit der ich die Möglichkeit habe, die Anzahl der ersten Zeilen löschen zu können, z.B.
ich möchte die ersten 5 Zeilen löschen. Siehe unten den Source-Code:
Mein Wunsch ist, wie kann die Anzahl der Zeilen ermitteln, wenn ich die txt-Datei auf 50 MB begrenzen möchte und meine txt-Datei ist z.B. 160 MB groß? Ich will die Anzahl der Zeilen nicht selber bestimmen, sondern es soll ja durch die Datei-Größe berechnet werden oder habt ihr vielleicht eine andere Idee! Die Text-Datei sieht so aus:
04.10.2010 08:13:43 User[ 1943 ] CommandoGroup[ 0x0003 ] Commando[ 0x0015 ]
04.10.2010 08:13:45 User[ 1943 ] CommandoGroup[ 0x000B ] Commando[ 0x018F ]
04.10.2010 08:13:45 User[ 1943 ] CommandoGroup[ 0x000B ] Commando[ 0x018C ]
Nach dem Löschen darf es nicht so aussehen, sondern entweder komplette Zeile oder gar nichts löschen:
doGroup[ 0x0003 ] Commando[ 0x0015 ]
04.10.2010 08:13:45 User[ 1943 ] CommandoGroup[ 0x000B ] Commando[ 0x018F ]
04.10.2010 08:13:45 User[ 1943 ] CommandoGroup[ 0x000B ] Commando[ 0x018C ]
Man kann ja per Schleife jede Zeile durchgehen und nach der Schleife mit randomAccessFile.getFilePointer() die Größe ermitteln! Da komme ich irgendwie nicht weiter!
Java:
package File;
import java.io.*;
public class FileContentDelete {
public FileContentDelete()
{
RandomAccessFile randomAccessFile = null;
try
{
randomAccessFile = new RandomAccessFile( "Protokoll.txt", "rw" );
if( randomAccessFile.length() == 0 )
return;
int numberOfLinesToBeSkipped = 5;
for (int i = 0; i < numberOfLinesToBeSkipped; i++)
System.out.println("Skipping: " + randomAccessFile.readLine());
long sourcePosition = randomAccessFile.getFilePointer();
long originalLengthInBytes = randomAccessFile.length();
long maxLength = originalLengthInBytes - sourcePosition;
long destinationPosition = 0;
byte[] buffer = new byte[65535];
moveContent( randomAccessFile, sourcePosition, destinationPosition, maxLength, buffer );
randomAccessFile.setLength( maxLength );
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally
{
if( randomAccessFile != null )
{
try
{
randomAccessFile.close();
}
catch (IOException e) {
e.printStackTrace();
}
randomAccessFile = null;
}
}
}
public static void main(String[] args) {
new FileContentDelete();
}
private static void moveContent( RandomAccessFile randomAccessFile, long sourcePosition, long destinationPosition, long lengthInBytes, byte[] buffer )
{
int currentByteCount = 0;
int bytesRead = 0;
int bytesWritten = 0;
long currentSourcePosition = sourcePosition;
long currentDestinationPosition = destinationPosition;
try
{
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);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Gruß
Iron Monkey