# FTP storeFileStream Problem



## cbl (1. Feb 2012)

Hallo,

ich wollte eine Fortschrittsanzeige für FTP Upload in mein Programm integrieren.
Habe schon viel gelesen :rtfm: und ein Beispiel gefunden, das ich abgeändert habe.

Vorher hatte ich immer mit 

client.storeFile ( newItem.getName(),fis) ;

geschrieben und es klappte alles

nun verwende ich 
fos = client.storeFileStream(newItem.getName());
und die Datei ist nach dem Transfer manchmal größer manchmal kleiner
mache ich was falsch? :autsch:


```
public void copyFileStream ( FTPClient client , File item, FTPFile newItem) {
	
		FileInputStream fis= null;
		OutputStream fos = null;

				try {
					client.setFileType(FTP.BINARY_FILE_TYPE);
					fis = new FileInputStream(item.getAbsoluteFile());
					fos = client.storeFileStream(newItem.getName());
	
					int counter = 0;
	
					byte[] buffer = new byte[1024];
	
					while(true) {
						int bytes = fis.read(buffer);
						if(bytes < 0) 	break;
						fos.write(buffer, 0, bytes);
						counter += bytes;
// hier geht es zur Ausgabe
 						printFtpStatusBar ( item.getName(), counter,  item.length());
					}
	
//					if (fos != null) {fos.close();}
					if (fis != null) {fis.close();}
				
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} 
				
				FTPFile[] ftpfilesize;
				try {
						ftpfilesize = client.listFiles(newItem.getName());
						if (ftpfilesize[0].getSize() != item.length() ) {
							throw new TransferException ( " ... ");
						}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	}	

}
```

wenn ich die Zeile
if (fos != null) {fos.close();}
einkommentiere dann kommt eine ParserInitializationException

ohne läuft es aber die Größe stimmt nicht :bahnhof:


----------



## cbl (2. Feb 2012)

Oder hat jemand einen Tip wie ich einen FTP Upload vom Binärdaten mit Fortschrittsanzeige sonst noch realisieren könnte? ???:L


----------



## cbl (2. Feb 2012)

cbl hat gesagt.:


> nun verwende ich
> fos = client.storeFileStream(newItem.getName());
> und die Datei ist nach dem Transfer manchmal größer manchmal kleiner
> mache ich was falsch? :autsch:



Habe festgestellt, wenn ich in Zeile 31 "als vor der Überprüfung" einen Sleep einbaue, dann stimmt die Filegrösse .. aber es fliegt im Praxisbetrieb die ParserInitializationException bei machen Ftp-Verbindungen :noe:

ich galube ich gebe meinen Versuch auf ... hoffe IMMER noch das jemand ein funktionierendes Beispiel kennt, das funzt.


----------



## cbl (7. Feb 2012)

DANKE Lumaraf
er hat mir den richtigen Tip gegeben. :applaus:

client.completePendingCommand();

hatte ich vergessen


----------

