Datei einlesen

Laren

Bekanntes Mitglied
Hi,

Ich wollte eine Datei einlesen und mittels RandomAcessFile die einzelnen Zeichen ersetzten.
Soweit geht das auch, aber die Schleife ist eine Endlosschleife. Wie schreibe ich die Schleife um, dass sie nur ans Ende der Datei läuft?

Grüße

Java:
            schreiben = new RandomAccessFile(datei, "rw");

            for ( int c; ( c = in.read() ) != -1; )

            
            {
      
             
                
             schreiben.writeBytes("d");
             
            }
 

jgh

Top Contributor
grundsätzlich liefert die methode read() einen integer Wert wieder, der das aktuelle Zeichen liefert, ist kein Zeichen mehr vorhanden, wird "-1" zurückgegeben...

Java:
while(schreiben.read() != -1){

//mache was auch immer

}
 

Laren

Bekanntes Mitglied
2. Ich empfehle die gepufferte Ein-/Ausgabe, mit min 200 bytes

Hab ich, aber jetzt überschreibt er sie nicht mehr, sondern sie ist komplett leer.:(
Java:
 BufferedReader in = new BufferedReader(new FileReader(datei));
            BufferedWriter out = new BufferedWriter(new FileWriter(datei));
         
            while(in.read() != -1)

            
            {

             out.write("a");
             
            }

1. Was willst du genau tun?

Ich möchte eine Datei, die z.b. 100mb groß ist möglichst schnell überschreiben, um sie unbrauchbar zu machen, so in der Art "sicheres Löeschen"
 

Runtime

Top Contributor
Das geht mit Java gar nicht, sogar mit C wirds da schwierig, weil das Dateisystem die Dateien nie direkt überschreiben lässt, sondern Copys anlegt, damit die Datei zb zu einem früheren Zeitpunkt wiederhergestellt werden kann.
 

Michael...

Top Contributor
Gleichzeitig eine Datei auslesen und in die Datei schreiben wird wohl etwas schwierig ;-)
Warum soll die Datei überhaupt eingelesen werden, wenn sowie irgendetwas anderes reingeschrieben wird?
 

Ark

Top Contributor
Das geht mit Java gar nicht, sogar mit C wirds da schwierig, weil das Dateisystem die Dateien nie direkt überschreiben lässt, sondern Copys anlegt, damit die Datei zb zu einem früheren Zeitpunkt wiederhergestellt werden kann.
Das kommt auf das Dateisystem an. Ich denke, es gibt Dateisysteme, die das so machen, aber mir möchte da spontan keines einfallen. Auf jeden Fall ist der Ansatz mit einem RandomAccessFile sehr viel besser als mit einem OutputStream, weil bei Letzterem praktisch immer neue Blöcke belegt werden, während das bei RandomAccessFile nicht unbedingt der Fall sein muss.

Siehe auch hier.

Ark
 

Damarus

Mitglied
Ich hatte letztens auch fast das selbe Problem. Setz an das Ende vom Code der was schreiben soll mal:
Java:
out.flush();
Hat bei mir Wunder gewirkt :D
 

Ark

Top Contributor
Ich hatte letztens auch fast das selbe Problem. Setz an das Ende vom Code der was schreiben soll mal:
Java:
out.flush();
Hat bei mir Wunder gewirkt :D
Ach, ja, da fällt mir ein: Man sollte, wenn man fertig mit Schreiben (oder Lesen) einer Datei ist, diese auch schließen (also den Datenstrom schließen). Dazu gibt es gerade [c]close()[/c]. Gepufferte Datenströme à la BufferedOutputStream führen dabei auch ein [c]flush()[/c] aus (zumindest in aktuellen Java-Versionen).

Je nach Datei- und/oder Betriebssystem kann das Vergessen des Schließens Probleme verursachen, z.B., dass andere Prozesse auf die Datei nicht zugreifen können, bis das Java-Programm beendet ist, oder (trotz [c]flush()[/c]!) einfach nichts in der Datei steht, obwohl gerade in sie geschrieben wurde (auch eine Möglichkeit, Datenverlust zu provozieren). Vielleicht ist das Betriebssystem auch der Meinung, dass ein Prozess nur eine ganz bestimmte Maximalzahl an Dateien gleichzeitig geöffnet haben darf, und so wird es plötzlich unmöglich, z.B. nach 255 vergessenen [c]close()[/c] eine weitere Datei zu öffnen!? Wer weiß …

Ark
 

Laren

Bekanntes Mitglied
closen (wenn man das so sagen kann^^) tue ich, wenn man das bei dem ausschnitt auch nicht sieht;)

Auf jeden Fall ist der Ansatz mit einem RandomAccessFile sehr viel besser als mit einem OutputStream, weil bei Letzterem praktisch immer neue Blöcke belegt werden, während das bei RandomAccessFile nicht unbedingt der Fall sein muss.

Ok, dann wäre ich wieder beim dem Urproblem^^, warum überschreibt er dann nicht alles?

Ich habe hier eine Testfile, in der steht:

"Hallo, ich bin ein Text"

Wenn ich diesen mit X überschreibe kommt raus:

"HaXlXXicX XiX XXn XeXtXX"

Wie schaffe ich es, dass er alles überschreibt?

Edit: Ok, wenn ich ihn mehrmals drüber laufen lasse, dann funktioniert es, aber es dauert immer noch sehr lange, wie kann ich dies puffern?
 
Zuletzt bearbeitet:

Ark

Top Contributor
Ok, dann wäre ich wieder beim dem Urproblem^^, warum überschreibt er dann nicht alles?
Ja, das würde mich auch interessieren; eventuell ein Fehler im Code? Lass ihn mal sehen. ;)

Ok, wenn ich ihn mehrmals drüber laufen lasse, dann funktioniert es, aber es dauert immer noch sehr lange, wie kann ich dies puffern?
Tja, das ist so eine Sache. Die einzige Möglichkeit der Pufferung (mal abgesehen von Kunstgriffen à la [c]FileChannel.map()[/c], der mir aber angesichts des schwach spezifizierten Verhaltens in dieser Situation eher unangebracht erscheint) ist dort die Verwendung von [c]write(byte[])[/c] bzw. [c]write(byte[], int, int)[/c]: Ein byte-Array mit Zufallszahlen vorbereiten und dann dieses rausschreiben, neu mit Zufallszahlen belegen, rausschreiben usw., bis mindestens einmal die komplette Datei überschrieben ist. Als Größe für das Array empfehle ich 8192 Bytes, das ist zumindest die Standardgröße des Puffers eines [c]BufferedOutputStream[/c] und damit hatte ich bisher nur gute Erfahrungen, was Performance angeht. Ob damit aber auch Zugriffe wie hier über ein [c]RandomAccessFile[/c] vergleichbar schnell möglich sind, kann ich nicht sagen.

Du solltest aber aufpassen, wenn es dir darum gehen sollte, die Datei mehrmals zu überschreiben: Wenn du Pech hast, puffert das Betriebssystem (oder die JVM) die Änderungen, bevor sie tatsächlich auf die Platte geschrieben werden. So könnte dann ein mehrfaches Überschreiben tatsächlich nur ein mehrfaches Überschreiben im Arbeitsspeicher, aber nur ein einfaches Überschreiben auf der Platte bedeuten. Welche write-Methode du benutzt, ist dabei unerheblich.

Ark
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
L Input/Output XML Datei einlesen (JAXB?) Java Basics - Anfänger-Themen 10
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
I Datei einlesen Java Basics - Anfänger-Themen 11
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
K Datei aus unbekannten Speicherorten einlesen Java Basics - Anfänger-Themen 1
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
M Methoden Datei einlesen und als return übergeben. Java Basics - Anfänger-Themen 8
P CSV Datei einlesen und damit ein Datenmodell befüllen Java Basics - Anfänger-Themen 2
N Datei einlesen und grafisch anzeigen Java Basics - Anfänger-Themen 31
P csv Datei einlesen und ausgeben Java Basics - Anfänger-Themen 5
J Text Datei einlesen Java Basics - Anfänger-Themen 6
N gerichteter Graph aus einer Datei einlesen Java Basics - Anfänger-Themen 21
E Datei einlesen und bestimmte Wörter ausgeben Java Basics - Anfänger-Themen 2
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
J Encoding Problem beim Einlesen einer txt Datei mit Umlauten Java Basics - Anfänger-Themen 3
V Excel Datei einlesen und verarbeiten Java Basics - Anfänger-Themen 4
stylegangsta Input/Output Hat eclipse eine Macke oder mein Code Array Datei einlesen Java Basics - Anfänger-Themen 5
N Mehrdimensionales float Array aus .txt-Datei einlesen? Java Basics - Anfänger-Themen 17
C Datei mit Daten einlesen und höchsten wert der zweiten Spalte ermitteln Java Basics - Anfänger-Themen 1
J CSV Datei einlesen und verarbeiten Java Basics - Anfänger-Themen 10
I BufferedReader Text-Datei einlesen??? Java Basics - Anfänger-Themen 1
S Datei einlesen - Dateipfad unter Linux anpassen Java Basics - Anfänger-Themen 12
A Datei in Array einlesen Java Basics - Anfänger-Themen 6
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
Ananaskirsche Input/Output Bestimmte Zeile aus Datei einlesen Java Basics - Anfänger-Themen 4
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
M CSV-File aus datei system einlesen Java Basics - Anfänger-Themen 3
B Datei in Java einlesen Java Basics - Anfänger-Themen 13
S Datei einlesen und ausgeben Java Basics - Anfänger-Themen 8
S Input/Output einlesen aus einer evtl. leeren Datei Java Basics - Anfänger-Themen 5
J Input/Output Datei - Zeilenumbruch einlesen Java Basics - Anfänger-Themen 10
H config Datei erstellen + einlesen Java Basics - Anfänger-Themen 15
F Datei einlesen ( Bytes ) Java Basics - Anfänger-Themen 12
T Klassen CSV datei einlesen und parsen Java Basics - Anfänger-Themen 4
U Datei einlesen Java Basics - Anfänger-Themen 9
S ANSI-Datei einlesen UND UTF-8-Datei schreiben Java Basics - Anfänger-Themen 3
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
I Datei einlesen, Inhalt in MAP ablegen Java Basics - Anfänger-Themen 10
A Erste Schritte Datei einlesen und Buchstaben zählen Java Basics - Anfänger-Themen 13
D txt-Datei zeilenweise als String einlesen Java Basics - Anfänger-Themen 2
E JPane txt datei einlesen Java Basics - Anfänger-Themen 5
D RegExp .txt-Datei einlesen Java Basics - Anfänger-Themen 6
M Datei Einlesen Fortan-Style? Java Basics - Anfänger-Themen 3
A Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 5
S Datei einlesen Java Basics - Anfänger-Themen 21
D Datei einlesen Fehler Java Basics - Anfänger-Themen 17
A Beim txt Datei einlesen kommen zusätzliche Lehrzeichen dazu. Java Basics - Anfänger-Themen 5
H eine Datei schnellstmöglich einlesen Java Basics - Anfänger-Themen 12
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
E Input/Output Linux datei in Windows zeilenweise einlesen Java Basics - Anfänger-Themen 4
S XML Datei einlesen und Elemente ausgeben Java Basics - Anfänger-Themen 4
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
S Datenströne - Text in eine Datei einlesen, umwandeln und in eine neue Datei schreiben Java Basics - Anfänger-Themen 6
E externe .txt Datei mit Scanner einlesen Java Basics - Anfänger-Themen 7
N Input/Output .txt-Datei einlesen, aufteilen und seperat abspeichern Java Basics - Anfänger-Themen 3
L Input/Output Datei in Java einlesen Java Basics - Anfänger-Themen 9
J Datei einlesen Java Basics - Anfänger-Themen 10
I .csv-Datei einlesen klappt aber kann nicht in String geschrieben werden!?!?! Java Basics - Anfänger-Themen 11
S Datei einlesen und Ergebnis wieder in Datei schreiben Java Basics - Anfänger-Themen 5
J Datei einlesen teile aus lines ändern und wieder rausschreiben. Java Basics - Anfänger-Themen 4
B Wertetabelle mit versch. Formaten aus txt-Datei einlesen Java Basics - Anfänger-Themen 2
H 200000 Zeilen aus Datei einlesen Java Basics - Anfänger-Themen 13
D CSV Datei einlesen und verarbeiten Java Basics - Anfänger-Themen 23
J byteweise Einlesen einer Datei "Von.. bis.." Java Basics - Anfänger-Themen 3
J Einlesen/Speichern von Strings aus einer Datei Java Basics - Anfänger-Themen 15
Z CSV-Datei einlesen mit dem JFileChooser !!! Java Basics - Anfänger-Themen 5
H Einlesen einer CSV-Datei Java Basics - Anfänger-Themen 2
X einlesen aus Datei, Fehler Java Basics - Anfänger-Themen 9
S Einlesen einer Datei? Java Basics - Anfänger-Themen 9
L Datei einlesen und neu geändert ausgeben Java Basics - Anfänger-Themen 8
B Formel aus Datei einlesen und benutzen Java Basics - Anfänger-Themen 3
C Datei einlesen Java Basics - Anfänger-Themen 19
H Datei einlesen in einer MVC Anwendung Java Basics - Anfänger-Themen 3
M OutOfMemoryError beim Datei einlesen Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben