Time to Remaining

Bluedaishi

Bekanntes Mitglied
Hallo ich würde gerne folgendes lösen.

ich habe ein Programm das den leeren freien Speicher eines USB Sticks solange voll schreibt.
Da bei einem großen USB Stick dies eine weile dauern kann würde ich gerne die Geschätzte
Endzeit ausgeben lassen und zwischen durch Aktualisieren.

Java:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class DiskFull {

   public static void main(String[] args) {

     
       final String working_dir = System.getProperty("user.dir");
        String osName=System.getProperty("os.name");
     
      File wholeFile = new File(working_dir + "whole.bin");
      FileOutputStream fos = null;

      int[] sizes = { 1024 * 4, 1024 * 64, 1024 * 1024 * 6 };

      for (int s = sizes.length; s > 0; s--) {
         System.out.println("Buffergröße " + sizes[s - 1] + " Bytes");
         byte[] buffer = new byte[sizes[s - 1]];

         for (int i = 0; i < buffer.length; i++) {
            buffer[i] = 0x00;
         }

         try {
            int j = 0;
            fos = new FileOutputStream(wholeFile, true);

            while (true) {
               fos.write(buffer);
               fos.flush();
               j++;
               if (j % 10 == 0) {
                  new Thread() {
                     public void run() {
                        File wholeFile = new File(working_dir + "whole.bin");
                        System.out.println((wholeFile.length() / (1024 * 1024)) + " MiB");
                     }
                  }.start();
               }
            }
         } catch (IOException e) {

            System.out.println("schalte Buffergröße um");
         } finally {
            try {
               if (fos != null)
                  fos.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }

      if (wholeFile.delete()) {
         System.out.println("temporäre Datei wurde gelöscht.");
      } else {
         System.out.println("die Datei '" + wholeFile.getAbsolutePath() + "' konnte nicht "
               + "gelöscht werden. Bitte löschen!");
      }
   }
}

Dies ist nur der Code der dafür sorgt das der Stick voll geschrieben wird. Es kann die Zeit über ein jLabel ausgegeben werden oder wenn es möglich ist aber was noch aufwendiger ist über eine Progressbar.
Ersteres würde für kich völlig reichen.

Vielen Danke schon mal für eure Hilfe
 

Joose

Top Contributor
Und was ist deine konkrete Frage? Wobei kommst du nicht weiter?
Weißt du schon anhand welcher Formel/Berechnung du die Zeit bekommst?
 

Bluedaishi

Bekanntes Mitglied
Nein leider habe ich keinen einzigen Ansatz wie ich das lösen könnte. Ich habe mir einige beispiele angesehen nur werde ich daraus nicht schlau bzw wie ich das in meinem code umsetzen muss.
 

Joose

Top Contributor
Ich würde mal mit der Formel anfangen. Wie kannst du auf die Endzeit kommen? Eine Möglichkeit wäre zu schauen wie lange es dauert 1% vom Speicherplatz zu füllen und die verbrauchte Zeit auf 100% hochzurechnen. .......
 

Bluedaishi

Bekanntes Mitglied
Ok nur wie frage ich das ab ????
denek das ich dafür einen Timer brauche ich lange er dafür braucht
 
Zuletzt bearbeitet:

Blender3D

Top Contributor
Abseits von dem Thema eine Warnung. USB Flash Speicher hat eine begrenzte Anzahl von Schreibvorgängen.
Typ SLC: 100.000 Schreibzyklen
Typ MLC: 10.000 Schreibzyklen
Die Gute Nachricht:
Der Controller im USB-Stick benutzt bestimmte Methoden, um alle Speicherzellen möglichst gleich oft zu beschreiben.
Die Schlechte Nachricht:
Ein USB-Stick der immer vollgeschrieben wird hat eine stark verkürzte Lebensdauer.
Das bedeutet man sollte diesen hauptsächlich zum Datentransport nützen und im Idealfall maximal halbvoll schreiben.
 

Neue Themen


Oben