2010-10-06 14 views
8

Java ile ilgili bir soru sormak istiyorum. DataInputStream'i almak için Java'daki URLConnection'ı kullanıyorum. ve DataInputStream'i Java'daki bir String değişkenine dönüştürmek istiyorum. Ne yapmalıyım? Biri bana yardım edebilir mi. teşekkür ederim.DataInputStream, Java'daki String'e nasıl dönüştürülür?

URL data = new URL("http://google.com"); 
URLConnection dataConnection = data.openConnection(); 
DataInputStream dis = new DataInputStream(dataConnection.getInputStream()); 
String data_string; 
// convent the DataInputStream to the String 
+4

DataInputString to String ya da DataInputString gelen String okumak ister misin? –

+0

@ org.life.java, cevabınız için teşekkür ederiz. DataInputStream dizesini (data_string = dis;) gibi dizeye dahil etmek istiyorum. Bu arada, başka bir soru olduğunu düşünüyorum, bu yüzden yeni bir soru yayınladım, sorduğum eski soru. Teşekkür ederim. :-) – Questions

+0

dönüştürmek için sadece dize 'dize str = dis.toString();' diyelim, ama Nesne size dize temsili verecektir, neden buna ihtiyacın var anlamıyorum? Veya google.com'un içeriğini okumak ister misiniz? –

cevap

8
import java.net.*; 
import java.io.*; 

class ConnectionTest { 
    public static void main(String[] args) { 
     try { 
      URL google = new URL("http://www.google.com/"); 
      URLConnection googleConnection = google.openConnection(); 
      DataInputStream dis = new DataInputStream(googleConnection.getInputStream()); 
      StringBuffer inputLine = new StringBuffer(); 
      String tmp; 
      while ((tmp = dis.readLine()) != null) { 
       inputLine.append(tmp); 
       System.out.println(tmp); 
      } 
      //use inputLine.toString(); here it would have whole source 
      dis.close(); 
     } catch (MalformedURLException me) { 
      System.out.println("MalformedURLException: " + me); 
     } catch (IOException ioe) { 
      System.out.println("IOException: " + ioe); 
     } 
    } 
} 

Bu ne istediğiniz değil.

+0

@ org.life.java, cevabınız için teşekkürler. Ve sanırım sorunun bazı yanlış anlamaları var. 'System.out.println (inputLine)' dan sonra ', inputLine' null 'değeri olur ve inputLine = " Questions

+0

@Questions kodu güncellendi –

+0

@ org.life.java, büyük büyük büyük yardım. çok teşekkür ederim ve çok üzgünüm – Questions

7

Hedefinize ulaşmak için commons-ioIOUtils.toString(dataConnection.getInputStream(), encoding) kullanabilirsiniz:

şu benim kodudur.

DataInputStream ne istediğiniz için kullanılmaz - yani bir web sitesinin içeriğini String olarak okumak istiyorsunuz.

+0

Bu, erişmekte olduğunuz URL’nin kodlamasını dikkate almaz. Kodlamayı açıkça belirtmek için 'IOUtils.toString 'yönteminin iki bağımsız değişken sürümünü kullanmalısınız. – Grodriguez

+0

@Grodriguez veya bir "InputStreamReader" kullanın. Kodlamayı ekledim, gerçekten iyi bir uygulama. – Bozho

+0

Bunun yerine bir “InputStreamReader” iletseniz bile, “InputStreamReader” oluşturulduğunda kodlamayı belirtmeniz gerekir, aksi takdirde aynı soruna sahip olursunuz (varsayılan platform kodlaması kullanılır, kodlamayla eşleşebilir veya eşleşmeyebilir) URL içeriğinin). – Grodriguez

7

Genel bir URL'den (örneğin, www.google.com) veri okumak isterseniz, muhtemelen bir DataInputStream kullanmak istemezsiniz. Bunun yerine, BufferedReader oluşturun ve satırı readLine() yöntemiyle hizalayın. İçeriğin karakter kümesini bulmak için URLConnection.getContentType() alanını kullanın (okuyucunuzu düzgün bir şekilde oluşturmak için buna ihtiyacınız olacaktır).

Örnek:

URL data = new URL("http://google.com"); 
URLConnection dataConnection = data.openConnection(); 

// Find out charset, default to ISO-8859-1 if unknown 
String charset = "ISO-8859-1"; 
String contentType = dataConnection.getContentType(); 
if (contentType != null) { 
    int pos = contentType.indexOf("charset="); 
    if (pos != -1) { 
     charset = contentType.substring(pos + "charset=".length()); 
    } 
} 

// Create reader and read string data 
BufferedReader r = new BufferedReader(
     new InputStreamReader(dataConnection.getInputStream(), charset)); 
String content = ""; 
String line; 
while ((line = r.readLine()) != null) { 
    content += line + "\n"; 
} 
+0

+1 Nice one Bana bildirdiğiniz için teşekkür ederiz. –

+1

ContentEncoding başlığı gerçekten karakter kümesi içeriyor mu? [Özellikler] 'e göre (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11), ör. Gzip. Sen karakterlere bakmalısın. – Kuitsi

+0

@Kuitsi: Tamamen haklısınız. Kodu güncellendi. – Grodriguez

İlgili konular