bereits gelesene Bytes herausfinden

Basti890

Mitglied
Hallo ich hab ein Problem, wie finde ich heraus wie viele bytes einer Datei bereits gelesen(verarbeited) wurden?

So les ich meine Datei ein:
Java:
try {
	BufferedReader in = new BufferedReader(new FileReader(filepath));
		try {
			File fila = new File(filepath);  //gesammt Größe der Datei bestimmen
			long size = fila.length();
			System.out.println(size);
			String line = in.readLine();

Schon mal Dankeim Voraus für helfende Antworten.:applaus:
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
wenn du grob arbeiten willst, kannst jedes Zeichen mal zwei rechnen bzw. einmal durchlaufen lassen und so testen wie viele Zeichen es am Ende sind im Vergleich zu file.size(),

du könntest auch statt FileReader InputStreamReader und FileInputStream nehmen und dazwischen einen eigenen Stream schalten, der nur mitzählt,
allerdings wird der BufferedReader immer ganze Riesenblöcke von tausenden chars/ bytes auf einmal abfragen,
insofern auch eine gewisse Ungenauigkeit, ob dir das reicht musst du wissen,
besser wird es vielleicht dadurch, nahe dem FileInputStream einen BufferedInputStream zu setzen und weiter oben keinen BufferedReader, dann aber schwer ganze Zeilen komfortabel abzufragen..

insgesamt gibt es durch die Auftrennung der Aufgaben (Butter, Char-Umwandlung, Bytes) keine konkrete Stelle, nein,
 

Basti890

Mitglied
Java:
int mL=0;
					long verarb =0;
				      public void run() {
				    	  try {
				  			BufferedReader in = new BufferedReader(new FileReader(filepath));
				  			try {
				  				File fila = new File(filepath);
				  				final long gsize = fila.length();
				  				final long gsizp = Math.round(gsize/100);
				  				long vsize = gsize;
				  				String line = in.readLine();
				  				while ((line = in.readLine()) != null){
				  					int i=0, c=0;
				  					vsize =vsize-(line.length()*8);
				  					verarb=gsize-vsize;
				  					mL=(int) (verarb/gsizp);
.....
fenster.asyncExec(new Runnable() {
				  			            public void run() {
				  			              if (loadbar.isDisposed())
				  			                return;
				  			              loadbar.setSelection(mL);
				  			            }
				  					});



:D nicht schöhn, aber funzt :bae:
 
S

SlaterB

Gast
weil char nunmal 2 bytes sind,
aber wie soeben festgestellt wird wohl effektiver gespeichert, nur ein byte für die einfachen Zeichen,
deswegen ja: testen statt vertrauen ;)
 

musiKk

Top Contributor
Ja, in Java ist ein char 2 Bytes groß. In Dateien nicht immer (bei UTF-16 z. B. fast immer). In Sprachen mit lateinischen Buchstaben ist es meist besser, von 1 auszugehen - jedenfalls bei Schätzungen.
 

Wildcard

Top Contributor
CharsetEncoder/Decoder haben Methoden die die durschnittliche Anzahl bytes pro Zeichen für das gegebene Encoding zurückliefern. 2 bytes halte ich für einen sehr ungünstigen Schätzwert, denn im westlichen Raum sind fast alles 1 byte ISO Encodings, oder UTF-8 mit primär 1-byte-igen Zeichen.
 

bERt0r

Top Contributor
Wenn du sowas wie eine Fortschrittsanzeige machen willst, lies die Datei nicht Zeilenweise aus, sondern in Buffern mit fixer Größe. Zu errechnen wie viel man dann gelesen hat ist dann ein klax.
Ich würde dir davon abraten, in einer Schleife, die Daten einliest, laufend neue Threads zu erstellen. Eine Lösung über einen SwingWorker wäre da sehr viel eleganter.
 
S

SlaterB

Gast
um auch wieder was anmerken zu können:
ein Runnable ist noch nicht unbedingt ein Thread, hängt davon ab was asyncExec() draus macht

in einer Schleife so vorzugehen scheint Standard zu sein:
Display: asyncExec(Runnable run) : Displayorg.eclipse.swt.widgetsJava by API

allerdings nicht unbedingt zigtausendmal pro Sekunde, das ist richtig

-----
bei
Java:
String line = in.readLine();
while ((line = in.readLine()) != null){
geht übrigens die erste Zeile verloren, line zunächst lieber bei null belassen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
O Gucken, ob bereits Töne (von wild fremden Programmen) ausgegeben werden Allgemeine Java-Themen 5
R Fehler: Bibliothek bereits geladen Allgemeine Java-Themen 3
J Systemtray bereits vorhanden ja oder nein? Allgemeine Java-Themen 4
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
J String Constanten bereits zur CompileZeit aufloesen? Allgemeine Java-Themen 8
M Bereits imlplementierte Interfaces nochmal bei "impleme Allgemeine Java-Themen 10
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
G überpüfen ob bereits instanz von java applikation läuft Allgemeine Java-Themen 4
M Suche , bereits während der eingabe ?? Allgemeine Java-Themen 4
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
V Input/Output Austausch von Bytes zwischen C# und Java Allgemeine Java-Themen 3
RalleYTN Input/Output Clip als ein Array von Bytes? Allgemeine Java-Themen 2
J Temperatur aus bytes auslesen. Allgemeine Java-Themen 13
Q Bytes verschwinden im CipherInputStream Allgemeine Java-Themen 1
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
J Bytes aus Socket lesen Allgemeine Java-Themen 9
Q Datentypen Short aus Bytes - Signed -> Unsigned? Allgemeine Java-Themen 9
C Datentypen int in bytes zerlegen und wieder zusammen setzen Allgemeine Java-Themen 13
K Hexadezimale Bytes Allgemeine Java-Themen 6
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
S String zu binary und zurück - Problem mit unsigned/signed bytes Allgemeine Java-Themen 2
TiME-SPLiNTER Von Unix, InputStreams und Null Bytes Allgemeine Java-Themen 2
K AES, Buffer und Bytes Allgemeine Java-Themen 2
S Bytes oder Hex-Werte zu Assembler Code? Allgemeine Java-Themen 6
L bytes nach int (little endian bitshift) Allgemeine Java-Themen 12
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
G Zwei bytes vergleichen Allgemeine Java-Themen 2
M Bytes in Datei schreiben Allgemeine Java-Themen 10
T Spezielle Bytes in Datei schreiben Allgemeine Java-Themen 7
F Einlesen von Bytes Allgemeine Java-Themen 9
reibi Größe Array aus bytes Allgemeine Java-Themen 14
G RXTX verschicken einzelener Bytes Allgemeine Java-Themen 8
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
G Mehrere Bytes auf einmal einlesen Allgemeine Java-Themen 4
P int -> 4 bytes Allgemeine Java-Themen 11
R Menge an Bytes eines OutputStreams ermitteln. Allgemeine Java-Themen 6
R Wieviele Bytes gesendet Allgemeine Java-Themen 3
T Bestimmte bytes in einer Datei ersetzen? Allgemeine Java-Themen 4
D 16-Bit int --> 2* 8-Bit Bytes Allgemeine Java-Themen 17
H Objekte verbrauchen immer mindestens 16 Bytes Allgemeine Java-Themen 3
W Array größer als 65536 Bytes Allgemeine Java-Themen 7
A RandomAccessFile - Bytes vom Anfang der Datei löschen Allgemeine Java-Themen 32
C Code of a method longer than 65535 bytes Allgemeine Java-Themen 3
L 8 bytes von bestimmter position weg lesen? Allgemeine Java-Themen 11
D 2 Bytes in ein int convertieren Allgemeine Java-Themen 2
B Umwandeln von Bytes in float Zahl (DataInputStream) Allgemeine Java-Themen 3
G 0 Bytes bei temporäre Datei. Warum? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben