无法弄清楚为什么索引超出了IO文件的范围

时间:2016-02-07 10:54:27

标签: java io indexoutofboundsexception

该程序从card.raw读取并创建一个jpg。我可以成功创建第一个图像,但我似乎无法弄清楚为什么我得到第二个图像的索引超出范围错误

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

2 个答案:

答案 0 :(得分:0)

选择任意大小的字节数组(512)并且图像文件大小必须大于512时,这是正常的。

答案 1 :(得分:0)

你写了

os2.write(fileContent2,513,512);

这意味着每次执行时,您都试图从跳过513个字节的数组中写入512个字节,但该数组只有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字节的数据。