BufferedReader

mal2000b

Grünschnabel
Hi,
ich lese eine Datei mit einem BufferedReader zeilenweise ein und möchte dem Benutzer mitteilen, wieviel Prozent der Datei eingelesen sind. (Die gelesene Datenmenge durch die gesamte)
Wie bekomme ich heraus, wieviel der Reader bereits gelesen hat?
Danke im Voraus.

PHP:
InputStreamReader inr = new InputStreamReader(out
					.getInputStream());
			BufferedReader blah = new BufferedReader(inr);
			String b;

			System.out.println("blah.read(); " + blah.read());
			
			
			while ((b= blah.readLine()) != null) {
				System.out.println(blah.readLine());
				System.out.println("-------" + blahS);

			}
 
Hi.

Generell gibt es keine Methode zu bestimmen wieviel Daten in einem Stream zur Verfügung stehen.

Wenn du von einer Datei liest, könntest du die Dateigröße bestimmen. Wenn du eine Verbindung zu einem HTTP Server hast, dann könntest du (falls der Server diese Information liefert/liefern kann), die Größe des Datenstreams bestimmen usw.

Gruß
 
Um den prozentualen Fortschritt anzeigen/berechnen zu können brauchst du 2 Werte:
1. Die Dateigröße
2. Anzahl der eingelesenen Bytes

wenn du nun 2. durch 1. Teilst erhälst du deinen Prozentwert. Damit der Benutzer nicht immer mit der gleichen Prozentzahl zugespammt wird, habe ich ein kleines Extra eingebaut, das zunächst überprüft, ob sich am prozentualen Fortschritt überhaupt etwas geändert hat. Falls dies der Fall ist, gibt es eine entprechende Ausgabe.

Dabei übernimmt der Integer "percent" die Aufgabe den zuletzt angezeigten Prozentwert zu speichern. Der Integer "n" wird in jedem Schleifendurchlauf neu berechnet und mit "percent" verglichen. Ist "n" größer als "percent" wird der neue Wert in "percent" gespeichert und ausgegeben.

Java:
	public static void readFile(File inputFile) throws FileNotFoundException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile)));
		long fileSize = inputFile.length();
		long bytesRead = 0;
		int percentage = -1;
		
		for(String s; (s = in.readLine()) != null; ) {
			//System.out.println(s);
			bytesRead += s.getBytes().length
			int n = (int)(100*bytesRead/fileSize);
			if(n > percentage) {
				percentage = n;
				System.out.printf("%3d %% der Datei eingelesen.\n", percentage);
			}
			
		}
	}
 
Zuletzt bearbeitet:
Zurück