2010-10-06 17 views
8

Chcę zadać pytanie dotyczące Java. Używam połączenia URLConnection w Javie, aby pobrać DataInputStream. i chcę przekonwertować DataInputStream na zmienną String w Javie. Co powinienem zrobić? Czy ktoś może mi pomóc. Dziękuję Ci.Jak przekonwertować DataInputStream na ciąg w Javie?

poniższych jest mój kod:

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

chcesz przekonwertować DataInputString na ciąg lub chcesz odczytać ciąg z DataInputString? –

+0

@ org.life.java, dziękuję za odpowiedź. Chcę konwertować DataInputStream na ciąg, jak (data_string = dis;). przy okazji, myślę, że jest to kolejne pytanie, więc opublikuję nowe pytanie, nie, stare pytanie, które zadaję. Dziękuję Ci. :-) – Questions

+0

do konwersji możesz po prostu napisać 'String str = dis.toString();', ale To da ci ciąg reprezentacji obiektu, nie rozumiem, dlaczego tego potrzebujesz? Lub chcesz przeczytać treść witryny google.com tutaj? –

Odpowiedz

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); 
     } 
    } 
} 

To jest to, co chcesz.

+0

@ org.life.java, dziękuję za odpowiedź. I myślę, że istnieje pewne nieporozumienie na temat problemu. Po "System.out.println (inputLine);", inputLine staje się wartością "null" i chcę inputLine = " Questions

+0

@Questions zaktualizował kod –

+0

@ org.life.java, wspaniała wspaniała pomoc.dziękuję bardzo i przepraszam stracić – Questions

7

Można użyć commons-ioIOUtils.toString(dataConnection.getInputStream(), encoding), aby osiągnąć swój cel.

DataInputStream nie jest używany do tego, co chcesz - tzn. Chcesz przeczytać zawartość strony internetowej jako String.

+0

Nie uwzględnia to kodowania treści dla adresu URL, do którego wchodzisz. Powinieneś użyć dwuargumentowej wersji metody 'IOUtils.toString' w celu jawnego określenia kodowania. – Grodriguez

+0

@Grodriguez lub użyj 'InputStreamReader'. Dodałem kodowanie, naprawdę dobrą praktykę. – Bozho

+0

Nawet jeśli zamiast tego przekazujesz 'InputStreamReader', musisz jeszcze określić kodowanie podczas tworzenia' InputStreamReader', inaczej będziesz miał ten sam problem (domyślne kodowanie platformy będzie używane, ale może nie pasować do kodowania zawartości adresu URL). – Grodriguez

7

Jeśli chcesz odczytać dane z ogólnego adresu URL (np. www.google.com), prawdopodobnie nie chcesz w ogóle używać numeru DataInputStream. Zamiast tego należy utworzyć BufferedReader i czytać wiersz po wierszu metodą readLine(). Użyj pola URLConnection.getContentType(), aby znaleźć zestaw znaków zawartości (będziesz potrzebować tego, aby poprawnie utworzyć swój czytnik).

Przykład:

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 Przyjemny Dzięki, że mnie powiadomiłeś. –

+1

Czy nagłówek ContentEncoding naprawdę zawiera zestaw znaków? Zgodnie z [specs] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11) powinien zawierać np. gzip. Powinieneś patrzeć na charset. – Kuitsi

+0

@Kuitsi: Masz całkowitą rację. Zaktualizowano kod. – Grodriguez

Powiązane problemy