2009-06-25 5 views
3

Ich schreibe willkürliche Byte-Arrays (Mock-Virus-Signaturen von 32 Bytes) in beliebige Dateien, und ich brauche Code zum Überschreiben einer bestimmten Datei mit einem Offset in die Datei. Meine spezifische Frage ist: Gibt es Quellcode/Bibliotheken, die ich verwenden kann, um diese bestimmte Aufgabe auszuführen?Java: Wo kann ich erweiterte Dateimanipulationsquellen/Bibliotheken finden?

Ich hatte dieses Problem mit Python-Datei-Manipulation auch. Ich suche nach einer Reihe von Funktionen, die eine Zeile töten können, Ausschneiden/Kopieren/Einfügen, etc. Meine Annahmen sind, dass dies extrem häufige Aufgaben sind, und ich konnte es nicht in der Java-API noch meine Google-Suche finden.

Sorry für nicht RTFM gut; Ich habe keine Informationen gefunden, und ich habe jetzt eine Weile gesucht.

+0

Wie groß sind die Dateien? Sie können sich FileChannel (http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html) und andere Teile von NIO ansehen. –

Antwort

4

Vielleicht suchen Sie nach etwas wie der RandomAccessFile Klasse im Standard Java JDK. Es unterstützt Lese- und Schreibvorgänge bei einigen Offset- und Byte-Arrays.

+2

Yup, das ist erstaunlich. Genau das möchte ich. – montooner

0

Haben Sie in File/FileReader/FileWriter/BufferedReader geschaut? Sie können den Inhalt der Dateien abrufen und bearbeiten, wie Sie möchten, können Sie die Daten in den Dateien durchsuchen, können Sie Dateien überschreiben, erstellen Sie neue, an ein vorhandenes anhängen.

Ich bin mir nicht sicher, dass dies ist genau das, wonach Sie fragen, aber ich benutze diese APIs die ganze Zeit für die Protokollierung, RTF-Editoren, Textdateierstellung für E-Mail und viele andere Dinge.

Soweit Ausschneiden/Kopieren/Vergangenheit geht, habe ich nicht die Möglichkeit, dies direkt zu tun, jedoch können Sie den Inhalt der Datei ausgeben und "kopieren", was Sie wollen und "einfügen" es in eine neue Datei oder an eine vorhandene Datei anhängen.

2

Soweit ich weiß, hat Java hauptsächlich Funktionen auf niedrigerer Ebene, um Dateien direkt zu manipulieren. Hier ist der beste, den ich gekommen bin oben mit

  1. Die Aktionen, die Sie beschreiben, sind Standard in der Swing-Welt und für Text kommt unten ein Document Objekt zu manipulieren. Diese wirken auf Daten im Speicher. Die Klasse java.nio.channels.FileChannel hat ähnliche Methoden, die direkt auf eine Datei wirken. Weder das Zeilenende noch das Zeilenende werden automatisch verfeinert, sondern andere Klassen in java.io und java.nio tun dies.

  2. Apache Commons hat eine Sandbox-Bibliothek namens Flatfile, die aussieht, als ob sie das tut, was Sie wollen. Das Problem ist, dass noch kein Code veröffentlicht wurde. Sie können jedoch mit Personen, die daran arbeiten, sprechen, um weitere Ideen zu erhalten. Ich habe keine generelle Überprüfung von Bibliotheken vorgenommen.

0

Während ein Byte-Array in eine Datei schreibt eine gemeinsame Aufgabe ist es, das Schreiben in eine Datei geben 32-Byte Byte-Array nur einmal ist einfach nicht etwas, das man in java.io finden wird :)

Würdest du die folgenden Methoden und Kommentare für den Anfang vernünftig finden? Ich wette, jemand hier, vielleicht sogar ich selbst, könnte es schnell herauspeitschen.

public static void writeFauxVirusSignature(File file, byte[] bytes, long offset) { 
    //open file 
    //move to offset 
    //write bytes 
    //close file 
} 

Fragen:

  • Wie groß könnte die potenziellen Zieldateien sein?
  • Brauchen Sie Leistung?

Ich frage, weil sauber, einfach Code zu lesen Apache Commons lib verwenden würde, aber große Datei schreibt sensible Umwelt in einer Performance wird RandomAccessFilejava.nio Bibliotheken

4

Java ist genau das erforderlich machen mit, was Sie wollen.

Es enthält Methoden wie seek(long), mit denen Sie verschieben können, wo immer Sie in der Datei benötigen. Es erlaubt auch gleichzeitig zu lesen und zu schreiben.

+0

RandomAccessFile könnte als Grundlage dienen (persönlich würde ich einen FileChannel verwenden), aber es ist eine Menge Arbeit notwendig, um Daten in der Mitte einer Datei zu entfernen oder einzufügen. – erickson

+0

Stimmt, aber es ist ein Anfang ... – jjnguy

Verwandte Themen