2017-02-16 48 views
0
File file = new File("download.png"); 
    File newfile = new File("D:\\Java.png"); 
    BufferedReader br=null; 
    BufferedWriter bw=null; 
    try { 
     FileReader fr = new FileReader(file); 
     FileWriter fw = new FileWriter(newfile); 
     br = new BufferedReader(fr); 
     bw = new BufferedWriter(fw); 
     char[] buf = new char[1024]; 
     int bytesRead; 
     while ((bytesRead = br.read(buf)) > 0) { 
      bw.write(buf, 0, bytesRead); 
     } 
     bw.flush(); 
     } 
     catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      br.close(); 
     bw.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 

這段代碼有什麼問題。 BufferedReader和Writer類可能嗎? 我知道如何使用InputStream和OutputStream複製圖像,所以不要使用它粘貼解決方案!如何使用bufferedreader/writer複製java中的圖像

+0

的可能的複製[你如何複製一個BufferedImage(http://stackoverflow.com/questions/3514158/how-do-you-clone-a-bufferedimage) – hB0

+0

簡短的回答是,你可以「T。 Reader和Writer API用於文本,圖像不是文本。 –

回答

3

這段代碼有什麼問題。

您對二進制數據使用基於文本的類。

BufferedReader和Writer Class有可能嗎?

不是在處理二進制數據時,不是。

我知道如何使用InputStream和OutputStream複製圖像,所以不要使用它來粘貼解決方案!

這是您應該使用的解決方案,因爲這些是爲二進制數據設計的類。

基本上,使用ReaderWriter用於非文本數據被破壞,並且請求麻煩。如果您在文本編輯器中打開文件並且沒有看到文本,它不是文本文件...(或者,它可能是一個文本文件,您使用了錯誤的編碼,但圖像和聲音等內容不是自然的文字。)

+0

還想問一下,如果視頻也是以二進制形式讀取的(二進制數據)? –

+3

@RajatGupta:是的,絕對。如果您在記事本中打開它,您希望看到哪些文本? –

-1

使用javax.imageio.ImageIO工具類,它有許多與圖像處理相關的實用方法。

try{ 
    File imagefile = new File("download.png"); 
    BufferedImage image = ImageIO.read(imagefile); 
    ImageIO.write(image, "png",new File("D:\\Java.png")); 
    ..... 
} 
+0

這將改變圖像。最好複製字節而不是涉及ImageIO。此外,它將整個圖像保存在內存中,這意味着它不適用於非常大的圖像。 – VGR