2016-03-25 4 views
1

Aus irgendeinem Grund bekomme ich eine fileNotFoundException für beide Zeiten, die ich gelesen habe. Bemerkenswert ist, dass der Toast "Datei existiert!" Ausdruckt. Ich habe die BufferedReader an der Unterseite verwendet, um zu testen, ob der Inhalt der Datei korrekt ist.java.io.FileNotFoundException, öffnen fehlgeschlagen: ENOENT

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_calendar, container, false); 

    recipes = new ArrayMap<>(); 
    filename = "calendar_recipes.txt"; 

    bText= (EditText) v.findViewById(R.id.bEditText); 
    lText= (EditText) v.findViewById(R.id.lEditText); 
    dText= (EditText) v.findViewById(R.id.dEditText); 

    cal = (CalendarView) v.findViewById(R.id.calendarView); 
    date = cal.getDate(); 


    File file = getActivity().getFileStreamPath(filename); 

    if(file.exists()) 
    { 
     Toast.makeText(getActivity(), "File exists!", Toast.LENGTH_SHORT).show(); 
     try 
     { 
      FileInputStream fileInputStream = new FileInputStream(getActivity().getFilesDir()+filename); 
      ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
      Map recipes = (Map)objectInputStream.readObject(); 
     } 
     catch(ClassNotFoundException | IOException | ClassCastException e) { 
      e.printStackTrace(); 
     } 
    } 
    else 
    { 
     Toast.makeText(getActivity(), "File does not exist!!", Toast.LENGTH_SHORT).show(); 
     file = new File(getActivity().getFilesDir(), filename); 
    } 

    try { 
     BufferedReader in = new BufferedReader(new FileReader(filename)); 
     String line; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     in.close(); 
    } 

    catch (IOException e) { 
     e.printStackTrace(); 
    } 

Logcat ...

03-24 23:54:57.626 14059-14067/com.stringcheese.recipez.recip_ez W/art: Suspending all threads took: 7.202ms 
03-24 23:54:58.409 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: java.io.FileNotFoundException: /data/data/com.stringcheese.recipez.recip_ez/filescalendar_recipes.txt: open failed: ENOENT (No such file or directory) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:456) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at java.io.FileInputStream.<init>(FileInputStream.java:76) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at java.io.FileInputStream.<init>(FileInputStream.java:103) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at com.stringcheese.recipez.recip_ez.CalendarFragment.onCreateView(CalendarFragment.java:80) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1259) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.app.Activity.performStart(Activity.java:6026) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.app.ActivityThread.access$800(ActivityThread.java:155) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.os.Looper.loop(Looper.java:135) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5343) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
03-24 23:54:58.410 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at java.lang.reflect.Method.invoke(Method.java:372) 
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:702) 
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at libcore.io.Posix.open(Native Method) 
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err:  at libcore.io.IoBridge.open(IoBridge.java:442) 
03-24 23:54:58.411 14059-14059/com.stringcheese.recipez.recip_ez W/System.err: ... 23 more 
+0

Bitte zeigen Sie die volle Ausnahme –

+0

einen Grund, warum Sie den 'FileInputStream' Konstruktor nicht auf dem gleichen' Datei' Objekt aufrufen, auf dem Sie aufrufen, existiert auf? –

+0

Haben Sie das in Ihrem Manifest? '' –

Antwort

7

getFilesDir gibt ein File-Objekt. Wenn Sie onString on aufrufen (was Sie implizit tun), gibt es seinen Pfad zurück. Der Pfad ist nicht endet mit einem Schrägstrich, wenn die Datei ein Verzeichnis ist, so wird getActivity().getFilesDir()+filename in etwas wie "/data/data/com.yourapp/filescalendar_recipes.txt" führen.

Sie können entweder getActivity().getFilesDir()+File.separator+filename verwenden oder einfach new FileInputStream(file) anrufen.

0

Sie haben bereits eine File Instanz mit File file = getActivity().getFileStreamPath(filename); erstellt. Dies ist die Instanz, die Sie mit der Methode file.exists() prüfen. Dann versuchen Sie, eine andere Sache mit dem FileInputStream zu lesen. Sie sollten versuchen, FileInputStream fileInputStream = new FileInputStream(file);. Damit erstellen Sie Ihren Stream mit der Datei, die Sie bereits überprüft haben.