2013-07-29 25 views
4

我在這裏問了一個問題,並且我已經解決了我的問題,這要感謝用戶。這是我目前使用的代碼。由於doOutput無法寫URLConnection

void UploadToDatabase() throws MalformedURLException, IOException { 
      URL website = new URL("http://mk7vrlist.altervista.org/databases/record_file.txt"); 
      WritableByteChannel rbc = Channels.newChannel(website.openConnection().getOutputStream()); 

      FileOutputStream fos; 
      fos = new FileOutputStream("record_file.txt"); 
      fos.getChannel().transferTo(0, Long.MAX_VALUE, rbc); 
      fos.close(); 
    } 

我的目標是上傳文件record_file.txt在一個特定的網站鏈接,你可以在上面看到。然而,當我嘗試運行這段代碼,NetBeans的給了我這個錯誤:

java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true) 

我讀了一些東西,關於這一點,我只是rbc變量的聲明後添加以下代碼。

URLConnection urlc = website.openConnection(); 
urlc.setDoOutput(true); 

順便說一句,我總是有同樣的錯誤。你可以幫幫我嗎?

+0

您將需要將'urlc.getOutputStream()'傳遞給'Channels.newChannel()'。 – tbodt

+0

你能告訴我怎麼做嗎?用代碼 –

+1

我會把它放在一個答案。 – tbodt

回答

15

問題就在這條線:

WritableByteChannel rbc = Channels.newChannel(website.openConnection().getOutputStream()); 

您需要設置doOutputtrue這個工作。方法如下:

URLConnection urlc = website.openConnection(); 
urlc.setDoOutput(true); 
WritableByteChannel rbc = Channels.newChannel(urlc.getOutputStream()); 
+1

+1 :)現在我有另一個錯誤,如「java.nio.channels.NonReadableChannelException」。你知道我該怎麼修復它? –

+0

@tbodt你錯過了什麼:/ –

+0

@AlbertoRossi告訴我們什麼,然後 –

0

我是一名Java程序員,我有不同的解決方案。也許這對別人有用。 只需在您的網絡瀏覽器中查看您的高級代理設置。 我們公司的系統工程師已經更改了代理設置,但我並沒有意識到這一點。 這個錯誤花了我3個工作日。在我的公司編寫一個ftp上傳項目時,我得到了這個doOutput錯誤。我試過所有的東西,比如增加conn.setDoOutput(true)或'五十個陰影'的類似解決方案,但是他們中沒有人救了我。 但是,在我將代理設置更改爲正確的代碼後,錯誤消失了,現在我可以使用java中的urlConnection通過ftp上傳我的文件。 我使用下面鏈接中的代碼進行上傳過程,並且除主機,端口,用戶和密碼外沒有添加任何內容。 http://www.ajaxapp.com/2009/02/21/a-simple-java-ftp-connection-file-download-and-upload/

相關問題