2016-03-25 19 views
1

何らかの理由で、私は両方の時間のためにfileNotFoundExceptionを取得しています。注目すべき点は、トーストが "File exists!"という文字をプリントしていることです。ファイルの内容が正しいかどうかをテストするために、下部にBufferedReaderを使用しました。java.io.FileNotFoundException、オープンに失敗しました: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

完全な例外を表示してください。 –

+0

あなたが呼び出している同じ 'file'オブジェクトに' FileInputStream'コンストラクタを呼び出さない理由がありますか? –

+0

マニフェストにこれがありますか? ''使用許可 '' android:name = "android.permission.READ_EXTERNAL_STORAGE" /> ' –

答えて

7

getFilesDirは、Fileオブジェクトを返します。あなたが暗黙的にonStringを呼び出すと、パスを返します。パスがでない場合はファイルがディレクトリの場合スラッシュで終わるので、は"/data/data/com.yourapp/filescalendar_recipes.txt"のようになります。

getActivity().getFilesDir()+File.separator+filenameを使用することも、new FileInputStream(file)を呼び出すこともできます。

0

FileインスタンスはFile file = getActivity().getFileStreamPath(filename);ですでに作成されていますが、このインスタンスはfile.exists()メソッドで確認しているインスタンスです。次に、FileInputStreamで別のものを読み込もうとしています。試してみてくださいFileInputStream fileInputStream = new FileInputStream(file);。これで、すでにチェックしたファイルでストリームを作成しています。

関連する問題