2013-07-21 40 views
-1

我想寻找位于SDCARD(外部存储)的文件。
我以只读模式打开它。RandomAccessFile寻求异常

in = new RandomAccessFile(filePath, "r"); 

从这个文件流中读取的一切都是好的,直到我想在文件中查找。

long seekPosition = 100;//sample value 
in.seek(seekPosition); 

查找位置当然不大于文件大小而不是负数。然而,我面临一个没有细节的例外。 这里是异常跟踪:

产生java.io.IOException
在java.io.RandomAccessFile.openCheck(RandomAccessFile.java:258)
在java.io.RandomAccessFile.seek(RandomAccessFile.java:648)
....

问题是为什么发生这种情况,我该如何解决它?
它与位于共享存储上的文件中的seek有关还是我在此过程中遗漏了某些内容?
我主要关心的是以随机访问方式访问文件字节。

+1

显示比 – fge

+2

我试图寻找到它更多的代码。 'openCheck()'抛出一个IOException异常:'检查文件当前是否打开。如果是,则默默返回,如果不是则抛出异常.' – Vikram

+0

在调用seek之前是否可以关闭文件?此外,您的应用是否具有“访问外部存储”权限? – ethan

回答

1

那么(私人)RandomAccessFile.openCheck()方法(在Harvest/Android中)只是检查文件当前是否打开。如果它抛出一个IOException,这意味着你已经关闭了RandomAccessFile对象。

课:如果你认为你不希望/不明白一个例外:

  1. 阅读异常消息。
  2. 查看堆栈跟踪以查看引发异常的位置。
  3. 找到源代码。 (谷歌通常为我工作...)
  4. 看看源代码,看看它为什么抛出。

1 - 它不会在这种情况下帮助,因为一些奇怪的原因,他们扔IOException没有消息。在我看来,它是一个BUG。

参考:

+0

谢谢!我错过了删除在前面的函数关闭文件的行,所以问题是文件已关闭! – VSB