Unterscheidung: Binär- oder Textdatei

Status
Nicht offen für weitere Antworten.

Granjow

Mitglied
Hallo zusammen,

Vielleicht mag sich noch jemand erinnern: Ich wollte vor langer Zeit (etwa vor einem halben Jahr) ein Prog schreiben, mit dem man per Wiki-Syntax formatierten Text in eine Internetseite umwandeln kann. Nun ist das wirklich meine Maturaarbeit geworden: http://sf.net/projects/wiki2xhtml

Die Version 1.0.1 ist noch nicht ganz ausgereift, ich habe für die nächste Version einen Dateiauswahldialog eingebaut. Was aber noch fehlt: Das Prog unterscheidet nicht, ob es gerade eine Binär- oder eine Textdatei auseinander nimmt. Kann man Java irgendwie lieb fragen, damit es einem sagt, ob es eine Binärdatei ist?

Granjow

*schnarch*
 

Murray

Top Contributor
Das geht nicht nur in Java nicht; auch Text-Dateien liegen ja im Binärformat vor. Die Tatsache, dass es sich bei einer bestimmten Datei um eine Textdatei handelt, muss m.E. immer "von außen" vorgegeben werden (nicht umsonst muss man bei FTP vorher angeben, um was es sich handelt - aus dem Inhalt kann man das nicht zweifelsfrei ermitteln).

Ein hinreichendes - wenn auch nicht notwendiges - Kriterium für eine Binärdatei könnte das Auftauchen des Null-Bytes (also 0x00) sein.
 

gizmo

Bekanntes Mitglied
Es sollte schon eine möglichkeit geben, dies wenigstens ansatzweise zu machen. Wenn ich mit Kate (Texteditor unter KDE) ein binäres File öffne, dann merkt er das und informiert mich. Wie dies funktioniert, weiss ich aber auch nicht.
 
B

Beni

Gast
Eine Idee: die ersten ~100 Zeichen lesen. Wenn da genügend normale Buchstaben drunter sind, wird es eine Textdatei sein. Wenn das lauter Sonderzeichen sind, wird es vermutlich eine Binärdatei sein.
 
G

Gast

Gast
naja wenn die datei nur anzeigbare ascii/unicode zeichen enthält ist ist ne textdatei, und sonst binär
 

Granjow

Mitglied
Danke!

Code:
	/**
	 * Checks whether a file is binary by looking for null-Bytes.
	 * @param f - input file to check
	 * @return true, if it is a binary file
	 */
	public static boolean isBinary(File f) {
		boolean bin = false;
		
		try {
			InputStream is = new FileInputStream(f);
			int b;
			for (int i = 0; i < 100; i++) {
				b = is.read();
				if (b == 0) {
					System.err.println(f.getName() + ": Binary file!");
					bin = true;
					break;
				}
			}
		} catch (Exception e) {
			System.err.println(e);
		}
		
		return bin;
	}

So geht es. Ist der Code OK?
:)

Granjow
 

Murray

Top Contributor
Mit dem Code prüfst Du, ob sich die ersten 100 Bytes der Datei als Textdatei interpretieren lassen (was aber nicht ausschließt, dass es sich in Wirklichkeit doch um ein Binärdatei handelt). Du solltest aber noch den Sonderfall berücksichtigen, dass read -1 liefert - in diesem Fall gab es nichts mehr zu lesen, weil die Datei kürzer als 100 Bytes war)
 

Granjow

Mitglied
Code:
	/**
	 * Checks whether a file is binary by looking for null-Bytes.
	 * @param f - input file to check
	 * @return true, if it is a binary file
	 */
	public static boolean binaryCheck(File f) {
		boolean bin = false;
		
		try {
			InputStream is = new FileInputStream(f);
			int b;
			while ((b = is.read()) != -1)
				if (b == 0) {
					System.err.println("BINARY FILE");
					break;
				}
		} catch (Exception e) {
			System.err.println(e);
		}
		
		return bin;
	}

So besser? :)
Hier müsste die Binärdatei komplett aus Einsen bestehen, um als Textdatei erkannt zu werden, ich hoffe, das ist nicht soo wahrscheinlich.

Das hier dauert halt recht lange. Bei zwei Textdateien (zusammen 50 kB) sind es ungefähr 120 ms mehr.

Falls jemand meine Arbeit lesen will: http://www.box.net/public/u7d8z8dy4a (noch nicht ganz fertig gestaltet)

Granjow
 

byte

Top Contributor
1. Du setzt bin nie auf true.
2. Es ist langsam, weil Du jedes Byte einzelnd einliest. Verwende einen Buffer, also lies direkt viele Bytes ein.
 

Granjow

Mitglied
1. Hoppla :S
2. Blöde Frage: Wie mache ich das? Das hier geht nicht:
Code:
			FileInputStream fis = new FileInputStream(f);
			BufferedInputStream bis = new BufferedInputStream(fis)
			byte[] b = new byte[4];
			bis.read(b, 0, 4);
bis[0] enthält immer eine -1.

Granjow
 
G

Guest

Gast
Granjow hat gesagt.:
Code:
	/**
	 * Checks whether a file is binary by looking for null-Bytes.
	 * @param f - input file to check
	 * @return true, if it is a binary file
	 */
	public static boolean binaryCheck(File f) {
		boolean bin = false;
		
		try {
			InputStream is = new FileInputStream(f);
			int b;
			while ((b = is.read()) != -1)
				if (b == 0) {
					System.err.println("BINARY FILE");
					break;
				}
		} catch (Exception e) {
			System.err.println(e);
		}
		
		return bin;
	}

So besser? :)
Hier müsste die Binärdatei komplett aus Einsen bestehen, um als Textdatei erkannt zu werden, ich hoffe, das ist nicht soo wahrscheinlich.

oder aus zweien, dreien, ... ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Java Mail: Unterscheidung bei Attachments und eingefügte Bilder in Email Allgemeine Java-Themen 18
L Unterscheidung nach männlichen, weiblichen Personen Allgemeine Java-Themen 6
D Unterscheidung Mausklicks Allgemeine Java-Themen 11
M Barcode-Scanner unterscheidung zur Tastertur Allgemeine Java-Themen 7
T Datei Ordner in Binär-Zahlenkette umwandeln Allgemeine Java-Themen 11
H Input/Output InputStream: 32-Bit-Ganzzahl (DWORD) binär lesen Allgemeine Java-Themen 5
J Objekte binär speichern Allgemeine Java-Themen 10
D Positionen im String binär codiert Allgemeine Java-Themen 4
J Dateien binär vergleichen Allgemeine Java-Themen 8
P Binär oder Dezimal kodieren? Allgemeine Java-Themen 7
A Komponenten binär in Datei schreiben Allgemeine Java-Themen 11
R Von Dezimal zu Binär Allgemeine Java-Themen 6
D binär einlesen schneller? Allgemeine Java-Themen 3
C binär byte Allgemeine Java-Themen 4
M Strings binär bearbeiten Allgemeine Java-Themen 3
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
S Textdatei statt von Dateisystem aus .jar lesen Allgemeine Java-Themen 3
curranux Ausgabe als Textdatei schreiben. Allgemeine Java-Themen 2
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
M In Textdatei schreiben Allgemeine Java-Themen 3
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
OnDemand Download Textdatei falsches Charset Allgemeine Java-Themen 1
K Textdatei als Objekt Allgemeine Java-Themen 4
O JAR Export Textdatei benutze Allgemeine Java-Themen 14
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
L Filewriter schreibt Zahlen in Textdatei Allgemeine Java-Themen 2
D Input/Output Zeilen werden "ignoriert" beim Einlesen aus einer Textdatei Allgemeine Java-Themen 3
T Synchronisation einer Textdatei im Groupshare Allgemeine Java-Themen 1
I String einer Textdatei anfügen Allgemeine Java-Themen 2
S Von Wav Datei mit Morsecode in Morsecode als Textdatei Allgemeine Java-Themen 2
R Duplikate aus einer Textdatei entfernen? Allgemeine Java-Themen 20
K Input/Output Ausgabe in Textdatei Allgemeine Java-Themen 7
Iron Monkey Inhalt von JTable in die Textdatei mit StringWidth schreiben Allgemeine Java-Themen 3
J Textdatei auslesen, die gerade benutzt wird Allgemeine Java-Themen 8
P Textdatei aus Ressourcen laden. Allgemeine Java-Themen 8
W Auslesen von Textdatei Allgemeine Java-Themen 16
M gleichzeitiger Zugriff auf eine Textdatei Allgemeine Java-Themen 6
S TextDatei in Panel anzeigen Allgemeine Java-Themen 10
X Textdatei auf gewünschte Anzahl der Zeilen kürzen Allgemeine Java-Themen 2
S Input/Output Latin-9 (ISO 8859-15) Textdatei einlesen Allgemeine Java-Themen 2
L Input/Output Textdatei in Objekte überführen? Allgemeine Java-Themen 4
F In mitten einer Textdatei schreiben Allgemeine Java-Themen 7
N Textdatei in Jar Problem Allgemeine Java-Themen 6
B Leerzeile in Textdatei Allgemeine Java-Themen 3
B Textdatei Zeilen auslesen Allgemeine Java-Themen 7
E BlueJ Daten in Textdatei schreiben Allgemeine Java-Themen 21
D große Textdatei filtern Allgemeine Java-Themen 13
K Textdatei komplett auslesen bis auf 2 Zeilen Allgemeine Java-Themen 2
H Textdatei (1GB) einlesen und verarbeiten Allgemeine Java-Themen 15
S String verschlüsselt in Textdatei speichern Allgemeine Java-Themen 3
E Text ans Ende einer Textdatei anfügen Allgemeine Java-Themen 2
Balbes Dateipfad in den JFileChooser aus Textdatei einlesen Allgemeine Java-Themen 7
S Textdatei mit externen Editor öffnen Allgemeine Java-Themen 8
G Textdatei einlesen unter Windows 7 Allgemeine Java-Themen 4
A Textdatei im Applet einlesen Allgemeine Java-Themen 2
C Textdatei einlesen Allgemeine Java-Themen 3
L Textdatei nach Wörter durchsuchen Allgemeine Java-Themen 3
Psypsy Bits in Textdatei und zurück Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
ModellbahnerTT Problem: Schleife über Textdatei Allgemeine Java-Themen 5
W Auslesen einer Textdatei Allgemeine Java-Themen 2
D HILFE - Textdatei im jar auslesen Allgemeine Java-Themen 10
T Auslesen und schreiben in eine Textdatei.HILFE!HILFE! Allgemeine Java-Themen 23
G Mit FileWriter in Textdatei über jar Allgemeine Java-Themen 4
E textdatei über "öffnen mit" aufrufen Allgemeine Java-Themen 6
A Objekte in Textdatei weiterschreiben Allgemeine Java-Themen 5
M Textdatei auslesen / schreiben (Server) Allgemeine Java-Themen 9
D Textdatei umbenennen Allgemeine Java-Themen 2
C Software für Windows PC mit integierter Db oder Textdatei? Allgemeine Java-Themen 19
G 2 zeilen in textdatei beim auslesen verbinden Allgemeine Java-Themen 10
D Zeilenvorschub aus einer Textdatei rausnehmen Allgemeine Java-Themen 11
J Textdatei oder doch DB? Allgemeine Java-Themen 2
T GUI mit DB oder Textdatei? Allgemeine Java-Themen 11
G Textdatei in String einlesen Allgemeine Java-Themen 2
M Inhalt von Textdatei in Spinner Allgemeine Java-Themen 5
M neue Textdatei DOS/Unix-Format Allgemeine Java-Themen 11
E Zeilenumbruch in einer Textdatei Allgemeine Java-Themen 2
E Zeilenbumbruch in einer Textdatei Allgemeine Java-Themen 3
D Textdatei und JTextArea Allgemeine Java-Themen 5
M Worte aus Textdatei mit Java ersetzen Allgemeine Java-Themen 4
B Zeilenumbruch bei Schreiben einer Textdatei Allgemeine Java-Themen 10
M Textdatei per Request lesen? Allgemeine Java-Themen 2
L Textdatei einlesen und verändern Allgemeine Java-Themen 3
M Problem: Textdatei einlesen Allgemeine Java-Themen 2
Y Einlesen & Ausgeben einer Textdatei _2 Allgemeine Java-Themen 3
Y Einlesen & Ausgeben einer Textdatei Allgemeine Java-Themen 5
M Fehler beim öffnen einer 20 mb Textdatei im sign. Applet Allgemeine Java-Themen 5
byte Erste Zeile einer Textdatei entfernen Allgemeine Java-Themen 5
G Eingaben in Textdatei speichern Allgemeine Java-Themen 5
P Einlesen einer Textdatei Allgemeine Java-Themen 8
P Problem beim "spliten" eine Textdatei Allgemeine Java-Themen 3
T jar + Textdatei Allgemeine Java-Themen 2
X Bestimmtes Muster in Textdatei verändern Allgemeine Java-Themen 13
G Inhalt einer Textdatei in eine AWT List schreiben Allgemeine Java-Themen 3
G auslesen einer Textdatei Allgemeine Java-Themen 2
E Source-Code aus einer Textdatei kompilieren und ausführen Allgemeine Java-Themen 4
D Textdatei zeilenweise einlesen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben