2012-04-29 11 views
0

Read &内部メモリへの書き込み文字列を使用しています。私の"WriteFavData"は正常に動作しています。しかし、"ReadFavData"は機能していません。実際には(favFile.exists())場合、私はラインに達すると ReadFavData(.. ..)で、そのファイルが見つからないと言う&他の部分を実行します。私はすでにファイルがあるadbのシェル猫/data/data/com.android.mypackage/files/fav_data_channelを、コマンドラインシェルアクセスを使用してエミュレータ内部のメモリをチェックしています。なぜファイルが存在しないと言っているのですか?任意のアイデア....内部メモリからファイルを読み取る際の問題

public boolean ReadFavData(Context context, String channelName) 
     { 
      boolean isFileFound = false; 
      FileInputStream fin ; 
      StringBuffer strContent = new StringBuffer(""); 
      String fileName = FAV_FILE_NAME + "_" + channelName; 
      File favFile = new File(fileName); 
      int ch; 
      if(favFile.exists()) 
      { 
       isFileFound = true; 
       try { 
        fin = context.openFileInput(FAV_FILE_NAME + "_" + channelName); 
        isFileFound = true; 
        while ((ch = fin.read()) != -1) 
         { 
    strContent.append((char) ch); 
    } 

        fin.close();     


       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       }  
      } 
      else 
      { 
       Log.i(TAG, "not found"); 
      } 

      return isFileFound; 
     } 



public boolean WriteFavData(Context context, String channelName) 
     { 
      String favStr; 
      FileOutputStream fos ; 
      JSONObject videos = new JSONObject();   
      videos.put("videos", favJsonArray); 
      String favStr = videos.toJSONString(); //note.toString(); 
      String fileName = FAV_FILE_NAME + "_" + channelName; 
      File f = new File(fileName); 
      if(f.exists()) 
      { 
       Log.i("Old FIle", "Found"); 
       f.delete();  
      } 

      if(f.exists()) 
       Log.i("Still", "Exist"); 

      try {    
        fos = context.openFileOutput(FAV_FILE_NAME + "_" + channelName, Context.MODE_PRIVATE);    
       fos.write(favStr.getBytes()); 
       fos.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }  
      return true; 
     } 

は実際に、私はライン(file.exists())と、その再び&トラックをデバッグし、ファイルが存在しない..しかし、私は、この行をコメント場合&は私を読みます直接ファイルを読むことができます。何が間違ってif(file.exists())

答えて

2

favFile.exists()、それをチェックするために、あなたのプライベートデータディレクトリに行くことはありませんので、必ず、ここfalseを返します。 openFileInputまたはopenFileOutputとなります。

それを削除し、openFileInputためFileNotFoundExceptionをキャッチ。

それともfavFile名の前に、あなたのプライベートデータディレクトリへのパスを追加することができます。

new File("/data/data/com.android.mypackage/files/fav_data_channel").exists(); 

が真となります。

+0

hmmmm ..ありがとうございました。 – MicroEyes

+0

例外キャッチで 'false;を返すことができます。 –

+0

ok .. Thankx @Dotはすばらしい答えです。 – MicroEyes

0

ファイルを書き込んだ後、Filedescription.sync()を呼び出してみます。

FileOutputStream fos = ... 
... 
fos.getFD().sync(); 
+0

** fos.getFD()。sync(); **エラーが発生しています**ファイルの長さが無効です** – MicroEyes

+0

Logcatの出力を提供できます – Toorop

+0

ログはありません。 ** if(file.exists())**の行を追跡してください。ファイルは存在しません。しかし、この行にコメントをつけて直接ファイルを読むと、ファイルを正常に読み取ることができます。何が問題なの?** if(file.exists())** – MicroEyes

関連する問題