2013-07-21 41 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