从内部存储器读取文件的问题

时间:2012-04-29 06:24:09

标签: android

我正在使用read&将字符串写入内部存储器。我的“WriteFavData”工作正常。但是“ReadFavData”无效。实际上当我在ReadFavData(..,..)中到达 if(favFile.exists())行时,它表示文件未找到&执行else部分。我已经使用命令行shell访问 adb 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())

有什么问题

2 个答案:

答案 0 :(得分:2)

favFile.exists()始终在此处返回false,因为它不会转到您的私人数据目录进行检查。 openFileInputopenFileOutput即可。

删除它并抓住FileNotFoundException openFileInput

或者您可以在favFile名称之前添加路径到您的私人数据目录。

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

将是真的。

答案 1 :(得分:0)

尝试在写入文件后调用Filedescription.sync()。

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