Android:不完全覆盖文本文件

Android:不完全覆盖文本文件,android,file,text,overwrite,Android,File,Text,Overwrite,我的手机运行安卓4.0.4,处于媒体传输协议MTP模式。我的应用程序正在尝试使用以下代码的连续调用,用更大的文件覆盖手机SD卡上的相同文本文件: File mDir = new File(Environment.getExternalStorageDirectory(), "Location"); File mFile = new File(mDir, "Location.txt"); PrintWriter mPW = new PrintWriter(mFile); mPW.println(s

我的手机运行安卓4.0.4,处于媒体传输协议MTP模式。我的应用程序正在尝试使用以下代码的连续调用,用更大的文件覆盖手机SD卡上的相同文本文件:

File mDir = new File(Environment.getExternalStorageDirectory(), "Location");
File mFile = new File(mDir, "Location.txt");
PrintWriter mPW = new PrintWriter(mFile);
mPW.println(sData);  // sData is a string of a few hundred characters
mPW.flush();
mPW.close();
在USB调试模式下测试期间,我遇到了以下问题。在Windows7中,我可以打开一个用最新数据写入的文件,但修改日期的时间和大小与文件的较早写入相对应,我只能看到与该大小对应的字符数。有效地在旧文件中添加新数据

我在网上搜索过,但似乎没有人报告过这种问题。我尝试了很多更奇特的方法来编写文件,包括使用缓冲类,甚至在重新编写文件之前删除并重新创建文件,但都没有用


重新启动手机后,问题似乎消失了,但我想知道这是否给任何人敲响了警钟。

通过MTP界面发布的内容是MediaStore知道的文件。如果您使用MediaScannerConnection之类的工具主动告知MediaStore文件已更改,MediaStore最终会更快地获取您的更改

然而,MTP客户选择做什么取决于他们。一般来说,它们似乎在缓存结果,我不知道MTP是否有任何类型的推送语义来告诉MTP客户机嘿,你刚才要求的东西已经改变了。有些可能会根据MTP客户端UI中的重新加载或刷新选项重新加载内容。其他人可能认为内容是不变的,直到设备被拔出并重新插入


总的来说,我不主张您的方法不断地附加到同一个文件,用户希望能够实时看到这些更改,这仅仅是因为MTP的明显限制。

这很有道理,@commonware。幸运的是,为了简化开发过程,我只依赖MTP,因为用户将通过Airdroid或类似工具远程访问该文件。关于USB调试对MTP还是MSC同样满意,人们的看法似乎不尽相同。@user3787658:如果说MSC是指用于Android 1.x/2.x的USB大容量存储。然后,当文件作为驱动器装载到主机上时,您将根本无法写入该文件。MTP至少允许同时访问,尽管有限制。是的,我指的是USB大容量存储设备类。感谢您指出USB大容量存储不会真正加快开发速度。现在我知道问题只是可见性的问题,我可以不再担心它了。顺便说一句,我已经在使用SD re-scanner应用程序来尝试改进同步,但我通常也不得不拔掉并重新插入USB电缆@用户可以选择的另一个选项是在你的应用程序中嵌入一个小型的Web服务器来提供文件。我对生产代码中的这些内容感到紧张,但对于开发来说,这更合理。您甚至可以使用一些静态包装页来定时重新加载生成的内容,以避免重新加载Web浏览器。是的,我正试图避免使用昂贵的服务,如www.noip.com,但是用于开发的Web服务器非常有意义。