MP3 Header auslesen

Status
Nicht offen für weitere Antworten.
S

Sisko86

Gast
Hoffe es kann mir jemand helfen.
Ich möchte den MP3 Header auslesen.

Hab mal angefangen, vielleicht bin ich ja auf dem totalen Holzweg.

In Wikipedia steht, das ein MP3 Frame mit 11bits beginnt die mit 1 belegt sind.
So jetzt wollte ich danach suchen, find aber keine elf 1er bits.

Hier mal mein Konstruktor, weiter bin ich noch nicht gekommen:

Code:
public MP3Header(File file){
		try {
			int sync = 0;
			int i = 0, j = 0;
			byte tmp = 0;
			BufferedInputStream stream = 
				new BufferedInputStream(new FileInputStream(file));

			stream.read(header);
			
			while(i < headersize) {
				tmp = header[i];
				
				j = 0;
				while(j < 8) {
					if ((tmp & -128) == -128) {
						sync++;
						System.out.println("1");
						if (sync == 11) {
							System.out.println("Sync!!!!!!!!");
                                                        // Hier kommt er nicht rein
						}
					}
					else {
						System.out.println("0");
						sync = 0;
					}
					
					tmp <<= 1;
					j++;
				}
				i++;
			}
			//System.out.println(sync);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
S

Sisko86

Gast
Hab vergessen:

Code:
	private static final int headersize = 256; 
	private byte[] header = new byte[headersize];
 
S

Sisko86

Gast
Nachtrag:
Hab mal mehr von der Datei ausgelesen.
Nach 187 bytes hab ich die ersten 11 bits gefunden.

Ist das normal, müssen die nicht irgendwo am Anfang stehen?
 
G

Gast

Gast
ja ist normal bei mp3s, der header fängt irgendwo an, oft nicht am Anfang
 
S

Sisko86

Gast
Nachdem ich nun die 11 bits gefunden habe, wollte ich den Header weiter auslesen und auswerten.
Ganz besonders interresiert mich die Bitrate.

Kann es das geben, dass für jeden Frame eine andere Bitrate rauskommt?

Mit anderen Worten die Header unterscheiden sich.

Muss für eine MP3 die Bitrate nicht konstant bleiben?
 
G

Gast

Gast
nein, das nennt sich dann VBR und ist inzwischen standard.
 
G

Guest

Gast
naja, standard würd ich nicht sagen. Es wird nur sehr sehr sehr selten verwendet.
Hab mal eine Klasse geschrieben die das alles erledigt, vielleicht hilft sie dir ja weiter.

Code:
package at.cbh.jtagger.musicfile;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

import at.cbh.jtagger.exceptions.NoFrameHeaderFoundException;
import at.cbh.jtagger.exceptions.NotAMp3FileExcpetion;
import at.cbh.jtagger.util.JTaggerUtils;

/*
 * Diese Klasse erweiter die Klasse File um methoden die
 * relevant sind um Informationen aus einem MP3 File
 * auszulesen. Ein Mp3 File besteht aus vielen Frames die
 * alle einen 4 Byte grossen Header besitzen. In diesem
 * Header ist Information zu dem Mp3 gespeicher wie Bitrate
 * Samplingrate usw. Zusätzlich wurde noch eine Methode hinzugefügt
 * mit der sich die Dauer eines SOngs berechnen lässt. Die
 * Grösse des Files bekommt man über die Methoden der File Klasse.
 * 
 * Eine genaue Spezifikation des MP3 Frame headers ist unter
 * folgendem Link zu finden:
 * 
 * [url]http://www.mp3-tech.org/programmer/frame_header.html[/url]
 * 
 * author:  ******
 * version: 0.7
 * 
 */

/*
 * TODO: - Methode implementieren die prüft ob das Mp3 eine variable
 *         Bitrate hat. 
 * 	     - Einen besseren Weg finden den Frame Header eindeutig zu 
 *         validieren.	 
 *       - Exceptions werfen
 */


@SuppressWarnings("serial")
public class Mp3File extends MusicFile {

	/*
	 * In diesem String ist der Frameheader gespeichert
	 * 
	 * TODO: In einer späteren Verison sollte der Header in 
	 *       einem Byte Array gespeichert werden.
	 */
	
	private String 	firstFrameHeader;				
	
	private int 	bitrate;						
	private long 	duration;						
	private int 	samplingRate;					

	private String MPEGVersion;						
	private String layer;							
	private boolean hasProtectionBit = false;		
	private boolean isPadded = false;				
	private String channelMode;						
	private boolean hasCopyright = false;			
	private boolean isCopyOfOriginal = false;		
	private String emphasis;						
	
	/*
	 * Diese Variablen speicerh layer version und mpeg
	 * versiojn und dienen als Tabellenindex zur Brechnung
	 * der Bitrate und der Samplingrate
	 */
	
	private int l;									
	private int v;									
	
	@SuppressWarnings("unused")
	private long	startPosOfFirstFrameHeader;	
	
	/*
	 * Der Konstruktor erzeugt ein neues Mp3 Objekt. Es wird
	 * geprüft ob es sich um ein Mp3 file hadelt in dem die
	 * dateiendung mit allen variationen von .mp3 verglichen
	 * wird. Danach wird der Header des ersten frames gesucht
	 * und falls gefunden ausgelesen.
	 * 
	 *  Handelt es sich um ein anderes Fileformat oder wird
	 *  kein FrameHeader gefunden so wird eine Exception geworfen.
	 */
	
	public Mp3File(String pathname) throws NotAMp3FileExcpetion, NoFrameHeaderFoundException {
		super(pathname);

		

		if (!this.isMp3File())
			throw new NotAMp3FileExcpetion(pathname
					+ " is not a valid Mp3 File");

		/*
		 * Dies ist ein Zeiger. Er startet bei Position null
		 * im File und dient dem auffinden des Frameheaders
		 */
		
		startPosOfFirstFrameHeader = 0L;

		init();
	}

	/*
	 * Diese Methode prüft ob die Dateiendung MP3 ist und das file
	 * tatsächlich eine Datei ist und man lesend darauf zugreifen
	 * kann. 
	 */
	
	private boolean isMp3File() {

		return (this.getName().endsWith(".mp3")
				|| this.getName().endsWith(".MP3")
				|| this.getName().endsWith(".Mp3") || this.getName().endsWith(
				".mP3"))
				&& this.canRead() && this.isFile();

	}
	
    /*
     * Diese Methode sucht den ersten MP3 Frame Headers
     * im File. Es wird zuerst das Syncwort gesucht. Das
     * Synwortist 0xff dem 3 weiter Bytes folgen die gewisse
     * Kriteren erfüllen müssen um als frame Header durchzugehen.
     * Die Methode sucht einfach das auftreten des ersten Syncwortes
     * und vergleicht die 4 Bytes inkl. Synwort mit einem Muster.
     * Ist es ein gültiger Frameheader so wird er als String in 
     * die Variable firstFrameHeader geschrieben. Wenn nicht
     * so wir weiter im File gesucht.
     */
	
	private void getFirstFrameHeader() throws NoFrameHeaderFoundException {
		
		RandomAccessFile raf = null;
		
		try {
		
			raf = new RandomAccessFile(this,"r");
		
		} catch (FileNotFoundException e) {
		
			System.out.println("File not found");
		}
		
		/*
		 * Im Speicher werden 65536 Bytes für blöcke aus
		 * dem File reserviert die dann mit dem muster
		 * byteweise verglichen werden.
		 */
		
		byte byteBlock[] = new byte[1000];
		
		/*
		 * BlockCounter zählt wieviel blöcke schon gelesen
		 * werden und dient grundsätzlich zur positionsberechnung
		 * des Zeigers.
		 */
		
		long blockCounter = 0;
		
		/*
		 * Wenn der header gefunden wurde wird die schleife verlassen
		 */
		
		boolean headerFound = false;
		
		
		try {
			
			/*
			 * Hier wird der erste 65K Block in den
			 * Hauptspeicher gelesen.
			 */
			
			raf.read(byteBlock);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		/*
		 * Solange kein Header gefunden wurde wird der ByteBlock byteweise
		 * durchlaufen und geprüft ob es sich bei byte[i] + die nächsten 3
		 * Bytes um einen gültiogen Header Handeln kann. Ist dies der Fall
		 * wird die Schleife verlassen. Wenn nicht wird bis zum ende des
		 * Blockes weitergesucht. Da die letzten 3 Bytes nicht geprüft werden
		 * können (da ja noch kein neuer Block von der HD gelesen wurde werden
		 * die letzten 3 Bytes einfach beim neuen Block dazugelesen weshalb
		 * das RAF auch auch blockCounter * 65536 - 3 * blockCounter gesetzt 
		 * wird. 
		 */
		
		while (!headerFound) {

			for (int i = 0; i < byteBlock.length - 3; i++) {

				if (byteBlock[i] == (byte) 0xff) {

					if (isHeader(byteBlock[i + 1], byteBlock[i + 2],
							byteBlock[i + 3])) {
						firstFrameHeader = "11111111"
								+ JTaggerUtils.intArrayToString(JTaggerUtils
										.getBits(byteBlock[i + 1]))
								+ JTaggerUtils.intArrayToString(JTaggerUtils
										.getBits(byteBlock[i + 2]))
								+ JTaggerUtils.intArrayToString(JTaggerUtils
										.getBits(byteBlock[i + 3]));
						headerFound = true;
					
						/*
						 * Da der Header gefunden und in den SPeicher geschrieben
						 * wurde kann die Schleife verlassen werden.
						 */
						System.out.println(i);
						break;
						

					}

				}

			}
			
			blockCounter++;
			
			/*
			 * Da im ersten Block nix gefunden wurde wird ein neuer
			 * Block aus dem File in den Speicher gelesen.
			 */
			
			try {
				raf.seek(blockCounter * 1000 - 3 * blockCounter);
				raf.read(byteBlock);
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			/*
			 * Wenn kein Header gefunden wurde wird das RAF geschlossen
			 * und eine Exception geworfen.
			 */
			
			if((blockCounter * 1000 - 3 * blockCounter) > this.length()) {
				try {
					raf.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				throw new NoFrameHeaderFoundException("No frameHeaderFound");
				
			}
			

		}
		
		/*
		 * Wenn alles gepasst hat wird das RAF geschlossen
		 */
		
		try {
			raf.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
			
	
	

	}

	
	/*
	 * Diese Methode prüft ob die 3 Bytes die dem Syncwort folgen
	 * einen gültigen Mp3 Frame Header formen. Welche kriterien
	 * das sind kann unter folgendem Link nachgelesen werden:
	 * 
	 * [url]http://www.mp3-tech.org/programmer/frame_header.html[/url]
	 * 
	 * Die Methode prüft die kriteren Byteweise und macht
	 * AND verknüpfungen mit dem vorherigen Bytewerten.
	 * 
	 */
	
	private boolean isHeader(int byteTwo, int byteThree, int byteFour) {

		

		int two[] = JTaggerUtils.getBits(byteTwo);
		int three[] = JTaggerUtils.getBits(byteThree);
		int four[] = JTaggerUtils.getBits(byteFour);

		/*
		 * Hier wird geprüft ob die ersten 4 Bits des 
		 * zweiten Bytes gesetzt sind.
		 */

		if (two[0] == 0 || two[1] == 0 || two[2] == 0 || two[3] == 0)
			return false;

		/*
		 * Hier wird geprüft ob Bit 4 und Bit 5 
		 * nicht 01 lauten und Bit 6 und Bit 7 des zweiten
		 * Bytes nicht 00 lauten da diese Werte reserviert sind
		 * und auf ein knock out kriterium ist
		 */

		//if (two[3] == 0 && two[4] == 1)
			//return false; 
		
		if(two[5] == 0 && two[6] == 0)
			return false;

		/*
		 * Beim dritten Byte dürfen die ersten 4 Bits nicht
		 * gesetzt sein.
		 */

		if (three[0] == 1 && three[1] == 1 && three[2] == 1 && three[3] == 1)
			return false; // marks a bad header
		
		if (three[0] == 0 && three[1] == 0 && three[2] == 0 && three[3] == 0)
			return false; // marks a bad header
		
		if (three[4] == 1 && three[5] == 1)
			return false; // marks a bad header

		/*
		 * Beim vierten Byte dürfen die letzten 2 Bits nicht
		 * 10 sein.
		 */

		if (four[6] == 1 && four[7] == 0)
			return false;

		return true;
	}
	
	
	/*
	 * Diese Methode ermittelt aus dem übergebenen Code
	 * die MPEG Version. Der Code ist der Index für
	 * folgende Wertetabelle:
	 * 
	 * 00 - MPEG Version 2.5 (later extension of MPEG 2)
     * 01 - reserved
     * 10 - MPEG Version 2 (ISO/IEC 13818-3)
     * 11 - MPEG Version 1 (ISO/IEC 11172-3)
     * 
	 */
	
	private void detectMPEGVersion(String code) {

		final String MPEG_VERSION25 = "00";
		final String MPEG_VERSION2  = "10";
		final String MPEG_VERSION1  = "11";

		if (code.equals(MPEG_VERSION25)) {
			MPEGVersion = "MPEG Version 2.5";

			/*
			 * v = 3 ist der Wert für 2.5
			 */

			v = 3;

		} else if (code.equals(MPEG_VERSION2)) {
			MPEGVersion = "MPEG Version 2";
			v = 2;

		} else if (code.equals(MPEG_VERSION1)) {
			MPEGVersion = "MPEG Version 1";
			v = 1;
		}

	}
	
	/*
	 * Diese Methode ermittelt aus dem übergebenen Code
	 * die MPEG Version. Der Code ist der Index für
	 * folgende Wertetabelle:
	 * 
	 *  00 - reserved
     *  01 - Layer III
     *  10 - Layer II
     *  11 - Layer I
     *  
	 */
	
	private void detectLayerDescription(String code) {

		final String LAYER3 = "01";
		final String LAYER2 = "10";
		final String LAYER1 = "11";

		if (code.equals(LAYER3)) {
			layer = "Layer III";
			l = 3;
			
		} else if (code.equals(LAYER2)) {
			layer = "Layer II";
			l = 2;
			
		} else if (code.equals(LAYER1)) {
			layer = "Layer I";
			l = 1;
		}

	}
	
	/*
	 * Diese Methode prüft ob das Protection
	 * Bit gesetzt ist und setzt bei Bedarf den
	 * Marker auf true.
	 */
	
	private void detectProtectionBit(String code) {
		
		if (code.equals("1"))
			hasProtectionBit = true;
	
	}
	
	/*
	 * Diese Methode schlägt den Wert der Bitrat in einer
	 * Tabell nach. Benötigt werden dafür die Indizes code
	 * version und layer. Die Werte werden aus folgender
	 * Tabelle entnommen:
	 * 
	 * bits  	V1,L1  	V1,L2  	V1,L3  	V2,L1  	V2, L2 & L3
     * 0000 	free 	free 	free 	free 	free
     * 0001 	32 	    32 	    32 	    32 	    8
     * 0010 	64 	    48 	    40 	    48 	    16
     * 0011 	96 	    56 	    48 	    56 	    24
     * 0100 	128 	64 	    56 	    64 	    32
     * 0101 	160 	80 	    64 	    80 	    40
     * 0110 	192 	96 	    80 	    96 	    48
     * 0111 	224 	112 	96 	    112 	56
     * 1000 	256 	128 	112 	128 	64
     * 1001 	288 	160 	128 	144 	80
     * 1010 	320 	192 	160 	160 	96
     * 1011 	352 	224 	192 	176 	112
     * 1100 	384 	256 	224 	192 	128
     * 1101 	416 	320 	256 	224 	144
     * 1110 	448 	384 	320 	256 	160
     * 1111 	bad 	bad 	bad 	bad 	bad
	 */
	
	private void detectBitRate(String code, int vIn, int lIn) {
		
		/*
		 * Hier wird ein 2 Dimensionales Array initialisiert
		 * dass die Werte der BitRate Tabelle aufnimmt.
		 */
		
		System.out.println(code + " vIn " + vIn + " lIn " + lIn);
		
		final int BT[][] = new int[14][5];			
		
		/*
		 * Hier wird die BitRate Tabelle mit Werten gefüllt 
		 */
		
		BT[0][0]=  32;   BT[0][1]= 32;  BT[0][2]=  32;  BT[0][3]=  32;  BT[0][4]=  8;
		BT[1][0]=  64;   BT[1][1]= 48;  BT[1][2]=  40;  BT[1][3]=  48;  BT[1][4]=  16;
		BT[2][0]=  96;   BT[2][1]= 56;  BT[2][2]=  48;  BT[2][3]=  56;  BT[2][4]=  24;
		BT[3][0]=  128;  BT[3][1]= 64;  BT[3][2]=  56;  BT[3][3]=  64;  BT[3][4]=  32;
		BT[4][0]=  160;  BT[4][1]= 80;  BT[4][2]=  64;  BT[4][3]=  80;  BT[4][4]=  40;
		BT[5][0]=  192;  BT[5][1]= 96;  BT[5][2]=  80;  BT[5][3]=  96;  BT[5][4]=  48;
		BT[6][0]=  224;  BT[6][1]= 112; BT[6][2]=  96;  BT[6][3]=  112; BT[6][4]=  56;
		BT[7][0]=  256;  BT[7][1]= 128; BT[7][2]=  112; BT[7][3]=  128; BT[7][4]=  64;
		BT[8][0]=  288;  BT[8][1]= 160; BT[8][2]=  128; BT[8][3]=  144; BT[8][4]=  80;
		BT[9][0]=  320;  BT[9][1]= 192; BT[9][2]=  160; BT[9][3]=  160; BT[9][4]=  96;
		BT[10][0]= 352; BT[10][1]= 224; BT[10][2]= 192; BT[10][3]= 176; BT[10][4]= 112;
		BT[11][0]= 384; BT[11][1]= 256; BT[11][2]= 224; BT[11][3]= 192; BT[11][4]= 128;
		BT[12][0]= 416; BT[12][1]= 320; BT[12][2]= 256; BT[12][3]= 224; BT[12][4]= 144;
		BT[13][0]= 488; BT[13][1]= 384; BT[13][2]= 320; BT[13][3]= 256; BT[13][4]= 160;
		
		int n = 0;
		int m = 0;
		
		/*
		 * Der Version des Layers und des Mpeg Codes entsprechen werden
		 * die Werte aus der Tabelle gelesen
		 */
		
		if (vIn == 1 && lIn == 1)
			n = 0;
		if (vIn == 1 && lIn == 2)
			n = 1;
		if (vIn == 1 && lIn == 3)
			n = 2;
		if ((vIn == 2 || vIn == 3) && lIn == 2)
			n = 3;
		if ((vIn == 2 || vIn == 3) && (lIn == 2 || lIn == 3))
			n = 4;

		
		m = JTaggerUtils.getDecFromBinary(code) - 1;
		
		

		
		/*
		 * TODO: Exception werfen
		 */
		
		if(m > 13 || m < 0 || n < 0) {
			bitrate = 0;
			return;
		}

		
		
		bitrate = BT[m][n]; 
		
		
	}
	
	/*
	 * Diese Methode schlägt die Sampling Rate des Files mittels
	 * der Indizes code und der version in folgender Tabelle nach:
	 * 
	 * 00  	44100 Hz  	22050 Hz  	11025 Hz
     * 01 	48000 Hz 	24000 Hz 	12000 Hz
     * 10 	32000 Hz 	16000 Hz 	8000 Hz
     * 11 	reserv. 	reserv. 	reserv.
     * 
	 */
	
	private void detectSampleRate(String code,int vIn) {
		
		final int SRT[][] = new int[3][3];
		
		SRT[0][0] = 44100; SRT[0][1] = 22050; SRT[0][2] = 11025;
		SRT[1][0] = 48000; SRT[1][1] = 24000; SRT[1][2] = 12000;
		SRT[2][0] = 32000; SRT[2][1] = 16000; SRT[2][2] = 8000;
		
		int index = JTaggerUtils.getDecFromBinary(code);
		
		/*
		 * TODO: Exception werfen
		 */
		
		if(index < 0) {
			samplingRate = 0;
			return;
		}
		
		samplingRate = SRT[index][vIn - 1];
	}
	
	/*
	 * Prüft ob das Padding bit gesetzt ist
	 */
	
	private void detectPaddingBit(String code) {
		
		if (code.equals("1")) isPadded = true;
		
	}
	
	
	/*
	 * Liest den Channel Mode aus dem header
	 */
	
	private void detectChannelMode(String code) {

		final String CM[] = { "Stereo", "Joint Stereo (Stereo)",
				"Dual Channel (Stereo)", "Single Channel (Mono)" };

		int index = JTaggerUtils.getDecFromBinary(code);
		
		/*
		 * TODO: Exception werfen
		 */
		
		if(index < 0 || index > 3) {
			channelMode = "";
			return;
		}
		
		channelMode = CM[index];
	}
	
	/*
	 * Prüft ob das Copyrigth bit gesetzt ist.
	 */
	
	private void detectCopyRight(String code) {
		
		if (code.equals("1"))
			hasCopyright = true;
		
	}
	
	/*
	 * Prüft ob das File ein original ist.
	 */
	
	private void detectOriginal(String code) {
		
		if (code.equals("1"))
			isCopyOfOriginal = true;
		
	}
	
	/*
	 * Setzt das Emphasis des files
	 */
	
	private void detectEmphasis(String code) {

		int index = JTaggerUtils.getDecFromBinary(code);
		
		/*
		 * TODO: Exception werfen
		 */
		
		if(index == 0) emphasis = "none";
		else if(index == 1) emphasis = "50/15 ms";
		else if( index == 3) emphasis = "CCIT J.17";
		else emphasis = "Error";

	}


	public int getBitrate() {
		
		return bitrate;
		
	}


	public String getChannelMode() {
		
		return channelMode;
		
	}


	public long getDuration() {
		
		return duration;
		
	}


	public String getEmphasis() {
		
		return emphasis;
		
	}


	public boolean isHasCopyright() {
		
		return hasCopyright;
		
	}


	public boolean isHasProtectionBit() {
		
		return hasProtectionBit;
		
	}


	public boolean isCopyOfOriginal() {
		
		return isCopyOfOriginal;
		
	}


	public boolean isPadded() {
		
		return isPadded;
		
	}


	public String getLayer() {
		
		return layer;
		
	}


	public String getMPEGVersion() {
		
		return MPEGVersion;
		
	}


	public int getSamplingRate() {
		
		return samplingRate;
		
	}
	
	
	public String getHeader() {
		
		return firstFrameHeader;
		
	}
	
	/*
	 * Sobald der Frame Header im File gefunden wurde können
	 * die Werte initialisiert werden. Die Strings sind gleich
	 * benannt wie die Positionsvariablen im Header:
	 * 
	 * AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
	 * 
	 * Diese Strings werden an die einzelnen Methoden übergeben 
	 * die dann die Information für die Klasse bereitstellen.
	 */
	
	private void init() throws NoFrameHeaderFoundException {

		getFirstFrameHeader();
		
		/*
		 * TODO Exception werfen
		 */

		String B = firstFrameHeader.substring(11, 13);
		String C = firstFrameHeader.substring(13, 15);
		String D = firstFrameHeader.substring(15, 16);
		String E = firstFrameHeader.substring(16, 20);
		String F = firstFrameHeader.substring(20, 22);
		String G = firstFrameHeader.substring(22, 23);
		String I = firstFrameHeader.substring(24, 26);
		String K = firstFrameHeader.substring(28, 29);
		String L = firstFrameHeader.substring(29, 30);
		String M = firstFrameHeader.substring(30, 32);

		detectMPEGVersion(B);
		detectLayerDescription(C);
		detectProtectionBit(D);
		detectBitRate(E, v, l);

		duration = JTaggerUtils.calcDuration(this.length(), bitrate);

		detectSampleRate(F, v);
		detectPaddingBit(G);
		detectChannelMode(I);
		detectCopyRight(K);
		detectOriginal(L);
		detectEmphasis(M);
		
		
	}

	

	@Override
	public String getMusicFileDescription() {
		return "MP3";
	}

	

}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W 2D-Grafik Erstellungsdatum JPG direkt aus Header (EXIF) auslesen. Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
C Itext Voralagen Header Footer -> PDF Allgemeine Java-Themen 0
V C-Header Datei aus .java File herstellen Allgemeine Java-Themen 10
D mp3 Header - wo könnte der Fehler liegen? Allgemeine Java-Themen 3
G Javamail Nachricht senden: Betreff und Header fehlen Allgemeine Java-Themen 4
lumo Row Header ist public, zeigt die funktion aber nicht public Allgemeine Java-Themen 8
R Header per Java senden Allgemeine Java-Themen 6
N JTable & JScrollPane - Wie den Header anpassen? Allgemeine Java-Themen 4
S Homepage-Header nach Tageszeit autom. ändern? Allgemeine Java-Themen 2
L Input/Output Email mit großer Pdf Anhang auslesen? Allgemeine Java-Themen 6
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
T INI - Einträge auslesen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
O PDF auslesen und verändern, was ist besser iText oder PDFBox ? Allgemeine Java-Themen 9
Robertop Status von Caps- und NumLock auslesen Allgemeine Java-Themen 1
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
G Mac Package auslesen Allgemeine Java-Themen 17
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
M verschiedene Dokumente auslesen Allgemeine Java-Themen 1
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
L Dateien richtig auslesen Allgemeine Java-Themen 6
F WireGuard Status auslesen Allgemeine Java-Themen 3
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
I DOM-Parser - Element im Element an bestimmten Stellen auslesen Allgemeine Java-Themen 1
N Txt Datei auslesen. Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
x46 Webseite in Java auslesen Allgemeine Java-Themen 2
M Html Seite auslesen Allgemeine Java-Themen 16
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
B Cookie auslesen Allgemeine Java-Themen 3
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
J Teil einer URL auslesen Allgemeine Java-Themen 13
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
C Atfx mit Hilfe von OpenAtfx auslesen Allgemeine Java-Themen 1
C Position von Pixeln in Bilder auslesen Allgemeine Java-Themen 2
M aktive WLAN Teilnehmer auslesen? Allgemeine Java-Themen 6
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
C Webseite auslesen Allgemeine Java-Themen 3
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
M Tastatureingabe von Sondertasten auslesen Allgemeine Java-Themen 6
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
4a61766120617274697374 PDF iText Wort Koordinaten auslesen Allgemeine Java-Themen 1
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
T Url aus txt Datei auslesen und öffnen? Allgemeine Java-Themen 4
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
KeVoZ_ Properties mit String auslesen Allgemeine Java-Themen 11
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
D Aktuell installierte Java Version auslesen unter Windows Allgemeine Java-Themen 5
M Parameter auslesen im Servlet Allgemeine Java-Themen 0
M Input/Output USB Geräteinstanzkennung auslesen Allgemeine Java-Themen 3
M Daten aus anderen Programmen auslesen Allgemeine Java-Themen 2
T Datei Byteweise auslesen Allgemeine Java-Themen 1
T Datentypen MNIST Datenbank auslesen (.gz) Allgemeine Java-Themen 0
T Ini Datei auslesen Allgemeine Java-Themen 3
J Temperatur aus bytes auslesen. Allgemeine Java-Themen 13
I JSoup Class auslesen Allgemeine Java-Themen 1
Bluedaishi Textdateien auslesen Allgemeine Java-Themen 12
T ELM327 OBD2 auslesen Allgemeine Java-Themen 0
D Double aus String auslesen Allgemeine Java-Themen 8
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
A interaktives PDF auslesen/auswerten? Allgemeine Java-Themen 0
G Daten aus Website auslesen Allgemeine Java-Themen 7
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
I Java FX JsonObjekt Children auslesen Allgemeine Java-Themen 23
M RXTX Details auslesen Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
J Wav-Datei aus .jar auslesen Allgemeine Java-Themen 7
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
D CSV Datei auslesen Allgemeine Java-Themen 23
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
J Java JSON-Datei aus .Zip auslesen und Download mit Progress Bar Allgemeine Java-Themen 20
V Tooltips mit Java auslesen Allgemeine Java-Themen 1
I Inhalt einer Website auslesen Allgemeine Java-Themen 6
A JTable - CellRange auslesen Allgemeine Java-Themen 2
V 2d-Barcodes mit zxing auslesen Allgemeine Java-Themen 2
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
K Website in Programm einbinden und auslesen Allgemeine Java-Themen 2
M Image auslesen Allgemeine Java-Themen 2
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben