0

内部メモリへの読み取りと書き込みの文字列を使用しています。「 WriteFavData は正常に機能しています。しかし、「ReadFavData」では機能していません。実際、ReadFavData(..、..)のif(favFile.exists())の行に到達すると、ファイルが見つからないと表示され、else部分が実行されます。コマンドラインshellaccessadb shell cat /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;
        }

実際、私は再度デバッグして、if(file.exists())行でそれを追跡しましたが、ファイルは存在しません。しかし、この行にコメントしてファイルを直接読み取ると、ファイルを正常に読み取ることができません。if(file.exists())の何が問題になっていますか?

4

2 に答える 2

2

favFile.exists()falseプライベートデータディレクトリに移動してチェックすることはないため、常にここに戻ります。openFileInputまたはopenFileOutputします。

それを削除し、のためにキャッチFileNotFoundExceptionopenFileInputます。

または、名前の前にプライベートデータディレクトリへのパスを追加できますfavFile

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

その時は本当になります。

于 2012-04-29T07:15:13.243 に答える
0

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

FileOutputStream fos = ...
...
fos.getFD().sync();
于 2012-04-29T06:30:01.070 に答える