2014-02-16 2 views
0

У меня есть этот метод предполагается для чтения файла:Почему я не могу прочитать файл только для чтения?

/* Read file's content */ 
    private ArrayList<String> readFromFile() { 
     File file = new File("jokesBody1.bjk"); 
     ArrayList<String> list = new ArrayList<String>(); 
     try { 
      file.createNewFile(); 
      ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); 
      try { 
       list = (ArrayList)ois.readObject(); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } 
      ois.close(); 
      } catch (IOException e) { 
      Log.e("log activity", "Can not read file: " + e.toString()); 
     } 

     return list; 
    } 

Когда я звоню, он возвращает:

02-16 06:15:32.686: E/log activity(1380): Can not read file: java.io.IOException: open failed: EROFS (Read-only file system) 

Даже, если файл, прочтите, почему я не могу читать ? Я действительно не могу понять, что такое wroong. У меня есть эта premission в моем манифесте:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Может кто-то дать мне ключ? Я знаю, что мне не хватает чего-то маленького, но я действительно не могу это заметить.

Вот как я пишу файл:

/* Write content to a file */ 
    private void writeToFile(ArrayList<String> list, Context cont) { 
     File file = new File("jokesBody1.bjk");  
     FileOutputStream fos; 
     if(list != null){ 
     try {   
       fos = cont.openFileOutput("jokesBody1.bjk", Context.MODE_PRIVATE); 
       ObjectOutputStream out = new ObjectOutputStream(fos); 
       out.writeObject(list); 
       out.close(); 
     } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
     } catch (IOException e) { 
       e.printStackTrace(); 
     } 
     }else{ 
      try { 
       file.createNewFile(); 
       fos = openFileOutput("jokesBody1.bjk",Context.MODE_PRIVATE); 
       ObjectOutputStream out = new ObjectOutputStream(fos); 
       out.writeObject(""); 
       out.close(); 
     } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
     } catch (IOException e) { 
       e.printStackTrace(); 
     } 
     } 
    } 
+1

** Где ** - ваш файл? ** Файл file = new File ("jokesBody1.bjk"); ** Я не вижу никакого ** пути **. –

+0

Ваша переменная 'File' при записи файла совершенно бесполезна. –

+0

Возможный дубликат [Невозможно прочитать файл по странной причине] (http://stackoverflow.com/questions/21804263/cant-read-a-file-for-strange-reason) – Selvin

ответ

4

Вы пытаетесь создать файл, который, конечно, терпит неудачу на файл только для чтения.

Удалить эту строку:

file.createNewFile(); 

Это обычно используется, чтобы создать новый пустой файл перед записью в него. Вам это действительно не нужно, если вы просто хотите прочитать файл, который уже существует.

EDIT:

Просто используйте:

ObjectInputStream ois = new ObjectInputStream(context.openFileInput("jokesBody1.bjk")); 

Конечно, вы также должны пройти контекст для функции.

Вы можете использовать только File с полным путем. Для доступа к вашим личным файлам используйте Context, как и при сохранении файла.

Ваша полная функция должна выглядеть следующим образом:

private ArrayList<String> readFromFile(Context context) { 
    ArrayList<String> list = new ArrayList<String>(); 
    try { 
     ObjectInputStream ois = new ObjectInputStream(context.openFileInput("jokesBody1.bjk")); 
     try { 
      list = (ArrayList)ois.readObject(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
     ois.close(); 
     } catch (IOException e) { 
     Log.e("log activity", "Can not read file: " + e.toString()); 
    } 

    return list; 
} 
+0

'02-16 06:22 : 22.486: E/log activity (1450): Не удается прочитать файл: java.io.FileNotFoundException: /jokesBody1.bjk: open failed: ENOENT (Нет такого файла или каталога) 'это то, что я получил :( – chility

+2

Где ваш файл находится? –

+0

Посмотрите мои изменения, вы можете увидеть их там. – chility

1

Вы не указываете какой-либо путь:

File file = new File("jokesBody1.bjk"); 

Таким образом, вы не говорите приложение, где искать файл.

Возможно, вы хотите его здесь найти?

Environment.getExternalStorageDirectory() 
Смежные вопросы