2012-04-05 8 views
0

Kann jemand sehen, was mit diesem Code falsch ist. Es zeigt keine Fortschrittsbalken an, sondern überspielt alle Dateien. Ich habe Checkout Sun Tutorial und Swingworkers auch, aber ich konnte es noch nicht beheben.Wie wird ProgressMonitorInputStream zum FTP-Upload hinzugefügt?

private static boolean putFile(String m_sLocalFile, FtpClient m_client) { 
    boolean success = false; 
    int BUFFER_SIZE = 10240; 
    if (m_sLocalFile.length() == 0) { 
     System.out.println("Please enter file name"); 
    } 
    byte[] buffer = new byte[BUFFER_SIZE]; 
    try { 
     File f = new File(m_sLocalFile); 
     int size = (int) f.length(); 
     System.out.println("File " + m_sLocalFile + ": " + size + " bytes"); 
     System.out.println(size); 
     FileInputStream in = new FileInputStream(m_sLocalFile); 
     //test 
     InputStream inputStream = new BufferedInputStream(
         new ProgressMonitorInputStream(null,"Uploading " + f.getName(),in)); 

     //test 
     OutputStream out = m_client.put(f.getName()); 

     int counter = 0; 
     while (true) { 
      int bytes = inputStream.read(buffer); //in 
      if (bytes < 0) 
       break; 
      out.write(buffer, 0, bytes); 
      counter += bytes; 
      System.out.println(counter); 
     } 

     out.close(); 
     in.close(); 
     inputStream.close(); 
     success =true; 
    } catch (Exception ex) { 
     System.out.println("Error: " + ex.toString()); 
    } 
    return true; 
} 

Antwort

0

Ich denke, Ihr Code ist in Ordnung.
Vielleicht dauert die Aufgabe nicht lange genug, um den Fortschrittsbalken zu benötigen?

Hier ist eine modifizierte Version Ihres Codes, der aus einer lokalen Datei liest und in eine andere lokale Datei schreibt.
Ich habe auch eine Verzögerung hinzugefügt, so dass es gibt die Fortschrittsbalken Zeit zu kicken. Dies funktioniert gut auf meinem System mit einer Probe 12MB PDF-Datei, und zeigt den Fortschrittsbalken.
Wenn Sie eine kleinere Datei haben, dann erhöhen Sie einfach den Schlaf von 5 Millisekunden auf 100 oder etwas - Sie müssten experimentieren.

Und ich wusste nicht einmal, dass die ProgressMonitorInputStream-Klasse existiert, also habe ich selbst etwas gelernt;].

/** 
* main 
*/ 
public static void main(String[] args) { 
    try { 
     System.out.println("start"); 

     final String inf = "d:/testfile.pdf"; 
     final String outf = "d:/testfile.tmp.pdf"; 
     final FileOutputStream out = new FileOutputStream(outf) { 
      @Override 
      public void write(byte[] b, int off, int len) throws IOException { 
       super.write(b, off, len); 
       try { 
        // We delay the write by a few millis to give the progress bar time to kick in 
        Thread.sleep(5); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     putFile(inf, out); 

     System.out.println("end"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

private static boolean putFile(String m_sLocalFile, OutputStream out /*FtpClient m_client*/) { 
    boolean success = false; 
    int BUFFER_SIZE = 10240; 
    if (m_sLocalFile.length() == 0) { 
     System.out.println("Please enter file name"); 
    } 
    byte[] buffer = new byte[BUFFER_SIZE]; 
    try { 
     File f = new File(m_sLocalFile); 
     int size = (int) f.length(); 
     System.out.println("File " + m_sLocalFile + ": " + size + " bytes"); 
     System.out.println(size); 
     FileInputStream in = new FileInputStream(m_sLocalFile); 
     //test 
     InputStream inputStream = new BufferedInputStream(
         new ProgressMonitorInputStream(null,"Uploading " + f.getName(),in)); 

     //test 
     //OutputStream out = m_client.put(f.getName()); 

     int counter = 0; 
     while (true) { 
      int bytes = inputStream.read(buffer); //in 
      if (bytes < 0) 
       break; 
      out.write(buffer, 0, bytes); 
      counter += bytes; 
      System.out.println(counter); 
     } 

     out.close(); 
     in.close(); 
     inputStream.close(); 
     success =true; 
    } catch (Exception ex) { 
     System.out.println("Error: " + ex.toString()); 
    } 
    return true; 
} 
+0

Sie haben Recht, die Aufgabe dauert nicht lange genug für den Fortschrittsbalken benötigt werden? – itro