2010-10-06 17 views
8

Quiero hacer una pregunta acerca de Java. He usado URLConnection en Java para recuperar el DataInputStream. y quiero convertir DataInputStream en una variable String en Java. ¿Que debería hacer? Alguien puede ayudarme. gracias.Cómo convertir el DataInputStream a la cadena en Java?

La siguiente es mi código:

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

¿Desea convertir DataInputString a String o desea leer String de DataInputString? –

+0

@ org.life.java, gracias por su respuesta. Quiero convenir el DataInputStream a cadena, like (data_string = dis;). por cierto, creo que es otra cuestión, así que publico una nueva pregunta, no la vieja pregunta que hago. Gracias. :-) – Questions

+0

para convertir puede simplemente decir 'String str = dis.toString();', pero le dará una representación de cadena de Object, no entiendo por qué necesita esto? ¿O quieres leer el contenido de google.com aquí? –

Respuesta

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

Esto es lo que quiere.

+0

@ org.life.java, gracias por su respuesta. Y creo que hay un malentendido con el problema. Después de 'System.out.println (inputLine);', inputLine se convierte en valor 'nulo' y quiero inputLine = " Questions

+0

@Questions actualizó el código –

+0

@ org.life.java, una gran gran ayuda. Muchas gracias y siento perder su tiempo. – Questions

7

Puede utilizar commons-ioIOUtils.toString(dataConnection.getInputStream(), encoding) con el fin de lograr su objetivo.

DataInputStream no se utiliza para lo que desea, es decir, desea leer el contenido de un sitio web como String.

+0

Esto no tiene en cuenta la codificación de contenido para la URL a la que está accediendo. Debe usar la versión de dos argumentos del método 'IOUtils.toString' para especificar explícitamente la codificación. – Grodriguez

+0

@Grodriguez o usa un 'InputStreamReader'. Agregué la codificación, una buena práctica de hecho. – Bozho

+0

Incluso si pasa un 'InputStreamReader' en su lugar, aún necesita especificar la codificación cuando se crea el' InputStreamReader'; de lo contrario, tendrá el mismo problema (se usaría la codificación predeterminada de la plataforma, que puede o no coincidir con la codificación del contenido de la URL). – Grodriguez

7

Si desea leer datos de una URL genérica (como www.google.com), probablemente no desee utilizar un DataInputStream en absoluto. En su lugar, cree un BufferedReader y lea línea por línea con el método readLine(). Use el campo URLConnection.getContentType() para encontrar el juego de caracteres del contenido (lo necesitará para crear su lector correctamente).

Ejemplo:

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 Agradable Gracias por avisarme. –

+1

¿El encabezado ContentEncoding realmente contiene un juego de caracteres? De acuerdo con [especificaciones] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11) debe contener, por ejemplo. gzip. Deberías mirar charset. – Kuitsi

+0

@Kuitsi: Tiene toda la razón. Actualizado el código – Grodriguez