2016-02-07 57 views
0

該程序從card.raw讀取並創建一個jpg。我可以成功地創建了第一個形象,但我似乎無法找出原因,我得到一個索引出界誤差的第二圖像不知道爲什麼索引超出了IO文件的限制

import java.io.FileNotFoundException; 
    import java.io.FileOutputStream; 
    import java.io.BufferedInputStream; 
    import java.io.BufferedOutputStream; 

    public class Recoverytst { 
    public static void main (String[] args) throws IOException { 
     try { 
      FileInputStream fs = new FileInputStream("card.raw"); 
      FileOutputStream os = new FileOutputStream("1.jpg"); 
      byte[] fileContent = new byte[512]; 

      while (fs.read(fileContent) != -1) { 
      os.write(fileContent); 
     } 
      fs.close(); 
      os.close(); 
    } 
     catch(IOException ioe) { 
      System.out.println("Error " + ioe.getMessage()); 
    } 

try { 
    FileInputStream fs2 = new FileInputStream("card.raw"); 
    FileOutputStream os2 = new FileOutputStream("2.jpg"); 
    byte[] fileContent2 = new byte[512]; 

    while (fs2.read(fileContent2) != -1) { 

無法弄清楚,爲什麼我在這裏得到索引超出邊界錯誤下面

os2.write(fileContent2,513,512); 
    } 
    fs2.close(); 
    os2.close(); 
} 
catch(IOException ioe) { 
    System.out.println("Error " + ioe.getMessage()); 
    } 
} 
} 

回答

0

線這是您選擇的字節數組(512)和圖像文件大小必須大於512

+0

那你能否給我一些方向來獲得第二張圖片呢? – SteelFox

+0

以3000爲例,並測試您的程序。然後,如果它可以工作,可以通過在文件中使用length()方法以更簡潔的方式獲得圖像文件的大小。 – Smallware

+0

好的謝謝:) – SteelFox

0

你寫

的任意大小的方式正常
os2.write(fileContent2,513,512); 

這是什麼意思是每次它執行時,你試圖從數組中寫入512字節跳過513字節,但數組只有512字節長。所以它不適合。

試試這個..

File file = new File("path to card.raw"); 
long len = file.length(); 

byte[] fileContent = new byte[len]; 
fs2.read(fileContent); 

在使用

os2.write(fileContent2,513,512); 

出的圈只有一次之後。它將從513字節開始寫入512字節的數據。

+0

你能推薦一個更好的方式來寫我嗎?我是編程新手 – SteelFox

+0

將偏移量設置爲0(第二個參數) –

+0

這隻會讓我再次獲得第一個圖像嗎?我想獲取card.raw中的第二張圖片 – SteelFox

相關問題