# "Cannot write output after reading input" Exception



## Sued_Faust (15. Jul 2010)

Moin,

hier einfach mal mein Code meiner Methode. 


```
public void openConnection() throws IOException{
		File file = loadFile();
		FileInputStream fileInputStream = new FileInputStream(file);
		
		try {
			URL url = new URL(serverURL); 
		    urlConn = (HttpURLConnection) url.openConnection(); 
		    urlConn.setRequestMethod("PUT");
		    urlConn.setDoInput(true); 
		    urlConn.setDoOutput(true); 
		    urlConn.setUseCaches(false); 
		    urlConn.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded");
		    
		    int responseCode = urlConn.getResponseCode();	    
		    if (responseCode == HttpURLConnection.HTTP_OK){
		    		    
		    dos = new DataOutputStream (urlConn.getOutputStream()); 
		    
		    bufferSize = Math.min(bytesAvailable, maxBufferSize);
            buffer = new byte[bufferSize];
            
            int bytes;
            while ((bytes = fileInputStream.read(buffer)) > 0) {
            	dos.write(buffer, 0, bytes);
            	
            	dos.flush();
            }
    	
//		    pmis.close();
		    
            fileInputStream.close();
 
		    dos.flush(); 
		    dos.close();
		    }else{
		    	msg = String.valueOf(urlConn.getResponseCode()) + " Fehler!";
		    }

		}catch(Exception e){
			msg = e.getMessage() + " Aus opneConnection!";
			repaint();
			e.getStackTrace();
		}
		
	}
```

Was habe ich falsch gemacht?

Gruß


----------



## SlaterB (15. Jul 2010)

nach
Dodge the traps hiding in the URLConnection class - JavaWorld
ist es schlecht, vor dem Schreiben getInputStream() aufzurufen, welches anscheinend eine Verbindung zum Server öffenet,
und getResponseCode() macht genau das intern,


was hast du vor? wenn du etwas senden willst, dann sende auch, wieso vorher irgendeine 'Response' abfragen?
wenn du irgendwas vorher checken willst, dann brauchst du wahrscheinlich zwei verschiedene Connections,
für jedes Senden eine neue


----------



## Sued_Faust (15. Jul 2010)

Naja ich hab ne Datei auf meinem Lokalen System die ich an mein Server(z.Z auch Lokal) senden will. Daher dachte ich, dass ich die Datei von Server benötige um sie zu überschreiben und dann wieder zurücksende.
Deshalb der getOutputStream.

Den ResponceCode hab ich nur eingebaut um http fehlercodes ausfindig zu machen, da ich davon noch überhaupt keine Anung habe ...

Was genau müsst ich mir noch mal genauer anschaun damit es funktioniert? Sollte ich das einlesen der Datei vom Server weg lassen und dann direkt versuchen zu überschreiben?!

Gruß und danke!


----------



## SlaterB (15. Jul 2010)

Sued_Faust hat gesagt.:


> Naja ich hab ne Datei auf meinem Lokalen System die ich an mein Server(z.Z auch Lokal) senden will. Daher dachte ich, dass ich die Datei von Server benötige um sie zu überschreiben und dann wieder zurücksende.
> Deshalb der getOutputStream.


ist mir doch ganz egal, habe ich dazu irgendwas geschrieben? 

beziehst du dich auf 'was hast du vor?'?
da reicht dann 'will was senden', ok, gerne



> Den ResponceCode hab ich nur eingebaut um http fehlercodes ausfindig zu machen, da ich davon noch überhaupt keine Anung habe ...
> 
> Was genau müsst ich mir noch mal genauer anschaun damit es funktioniert?


tja, was soll ich sagen, war mein Posting so undeutlich?
getResponseCode() weg oder über eine andere Connection

anschauen kannst du dir den Link, da scheinen viele allgemeine Infos zu stehen,
bzw. alles bei google zu den beteiligten Klassen




> Sollte ich das einlesen der Datei vom Server weg lassen und dann direkt versuchen zu überschreiben?!


wie am Anfang völlig egal


----------

