2012-09-17 123 views
3

這可能非常容易解決,但我暫時停留了一段時間。我用了一個while循環來寫數據。我想將while循環中的數據寫入String。將數據寫入字符串

public void dumpPart(Part p) throws Exception { 
    InputStream is = p.getInputStream(); 
    if (!(is instanceof BufferedInputStream)) { 
     is = new BufferedInputStream(is); 
    } 
    int c; 
    System.out.println("Message: "); 
    while ((c = is.read()) != -1) { 
     System.out.write(c); //I want to write this data to a String. 

    } 
    sendmail.VerstuurEmail(mpMessage, kenmerk); 
} 

解決:

public void dumpPart(Part p) throws Exception { 
    InputStream is = p.getInputStream(); 
    if (!(is instanceof BufferedInputStream)) { 
     is = new BufferedInputStream(is); 
    } 
    int c; 
    final StringWriter sw = new StringWriter(); 
    System.out.println("Message: "); 
    while ((c = is.read()) != -1) { 
     sw.write(c); 
    } 
    mpMessage = sw.toString();; 
    sendmail.VerstuurEmail(mpMessage, kenmerk); 
} 

感謝您的幫助。

+0

是否要將此數據作爲字符串存儲在對象中? –

+0

@PeterLawrey我想將數據存儲在一個String中,對不起。 – Jef

回答

6

,可以考慮一個java.io.StringWriter(如JDK的1.4+):

System.out.println("Message: "); 

final StringWriter sw = new StringWriter(); 

int c; 
while ((c = is.read()) != -1) { 
    sw.write(c); 
} 

String data = sw.toString(); 
2

取而代之的是System.out的呼叫循環之前只是初始化一個StringBuffer和追加到它:

StringBuffer s = new StringBuffer(); 
while ((c = is.read()) != -1) { 
    s.append((char) c); 
} 
+0

c是一個'int',所以它可能無法編譯。 –

+0

的確,謝謝。 –

+2

我不會使用StringBuffer,如果我可以使用StringBuilder http://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html –

5

我會用IOUtils.toString(inputStream)或類似的東西。

+0

這是我更喜歡的,如果你不需要while循環出於其他原因。只需將它轉換爲:'String sPart = IOUtils.toString(is);' – Herm

1

它最好使用StringBuilder對象,而不是StringBuffer的(Difference between StringBuilder and StringBuffer

public void dumpPart(Part p) throws Exception { 
    InputStream is = p.getInputStream(); 
    if (!(is instanceof BufferedInputStream)) { 
     is = new BufferedInputStream(is); 
    } 
    int c; 
    StringBuilder sb = new StringBuilder(); 
    System.out.println("Message: "); 
    while ((c = is.read()) != -1) { 
     sb.append(c); 

    } 
    String result= sb.toString(); 
    sendmail.VerstuurEmail(mpMessage, kenmerk); 
} 
1

一種可能性是,做到這一點:

 int c; 
    System.out.println("Message: "); 
    StringWriter sw = new StringWriter(); 
    while ((c = is.read()) != -1) { 
     sw.write(c); 
    } 
    System.out.println(sw.toString()); 
1

另一種方式:

StringBuffer buffer = new StringBuffer(); 
byte[] b = new byte[4096]; 
for (int n; (n = is.read(b)) != -1;) { 
    buffer.append(new String(b, 0, n)); 
} 
String str = buffer.toString();