2014-03-06 97 views
0

我用下面的代碼寫入到存在於FTP server.but了java.net.MalformedURLException無法寫入文本文件存在於FTP服務器

URL url = new URL("ftp://[email protected]:[email protected]@ftp.xyz.com/testjar/2014-03-06-p.txt;type=i"); 
     URLConnection urlc = url.openConnection(); 
     OutputStream os = urlc.getOutputStream(); // To upload 
     OutputStream buffer = new BufferedOutputStream(os); 
     ObjectOutput output = new ObjectOutputStream(buffer); 
     output.writeObject("hiiiii"); 
     buffer.close(); 
     os.close(); 
     output.close(); 

以上的用戶名和密碼的文本文件是不是真實的,但它的演示看起來很真實。 有人知道如何解決這個問題或其他方法寫入.txt文件,讓我告訴。

Edit1:我的用戶名和密碼也包含@ char,並且密碼在那裏。 完全錯誤:

java.net.MalformedURLException: For input string: "[email protected]@ftp.xyz.com" 
    at java.net.URL.<init>(URL.java:619) 
    at java.net.URL.<init>(URL.java:482) 
    at java.net.URL.<init>(URL.java:431) 
    at CreateFolder.uploadfile(CreateFolder.java:39) 
    at CreateFolder.main(CreateFolder.java:74) 
Caused by: java.lang.NumberFormatException: For input string: "[email protected]@ftp.xyz.com" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:492) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at java.net.URLStreamHandler.parseURL(URLStreamHandler.java:217) 
    at java.net.URL.<init>(URL.java:614) 
    ... 4 more 
+0

你讀過這個「http://docs.oracle.com/javase/tutorial/networking/urls/」和這個「http://docs.oracle.com/javase/7/docs/api /java/net/MalformedURLException.html「 – saravanakumar

回答

0

您沒有向我們提供你的錯誤,但我看到的幾個問題在這裏:

  1. 連接字符串:我知道這是一個例子,但如果真實的用戶名/密碼包含'@'字符,URL不會被解析。
  2. ObjectOutputStream類旨在寫入對象數據,因此它可以通過ObjectInputStreamsee here)重建。這不是寫文本文件。如果你需要的是寫字符串到流更好地利用PrintStream

所以修改後的例子是:

try { 
    URL url = new URL("ftp://user:[email protected]/testjar/2014-03-06-p.txt;type=i"); 
    URLConnection urlc = url.openConnection(); 
    OutputStream os = urlc.getOutputStream(); // To upload 
    OutputStream buffer = new BufferedOutputStream(os); 
    PrintStream output = new PrintStream(buffer); 
    output.print("hiiiii"); 

} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally { 

    output.close(); 
    buffer.close(); 
    os.close(); 
} 
+0

是的,你寫我的用戶名,並通過兩個包含@ character.any解決方案? – Pranav

0

解決: 取代「@」字符用「%40」在分析時它會自動轉換爲'@'。

URL url = new URL("ftp://p%40g.com:g%[email protected]/testjar/2014-03-06-p.txt;type=i"); 
     URLConnection urlc = url.openConnection(); 
     OutputStream os = urlc.getOutputStream(); // To upload 
     OutputStream buffer = new BufferedOutputStream(os); 
     PrintStream output = new PrintStream(buffer); 
      output.print("wowhii"); 
     buffer.close(); 
     os.close(); 
     output.close();