我正在使用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())?
有什么问题答案 0 :(得分:2)
favFile.exists()
始终在此处返回false
,因为它不会转到您的私人数据目录进行检查。 openFileInput
或openFileOutput
即可。
删除它并抓住FileNotFoundException
openFileInput
。
或者您可以在favFile
名称之前添加路径到您的私人数据目录。
new File("/data/data/com.android.mypackage/files/fav_data_channel").exists();
那么将是真的。
答案 1 :(得分:0)
尝试在写入文件后调用Filedescription.sync()。
FileOutputStream fos = ...
...
fos.getFD().sync();