private void saveSetResult(int pos){
String filename = "system/media/bootlogo/logo_pos_record";
Log.d("BootAnimation", "write:"+Integer.toString(pos+1));
try {
RandomAccessFile out = new RandomAccessFile(filename, "rw");
out.seek(0);
out.writeBytes(Integer.toString(pos+1));
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
写文件的各种方法都试了。。在该文件保存setting下的某些设置,当保存完后平台10s内强制断电,然后重启,发现上次数据并未保存,
10s后再断电会保存成功,个人认为失败情况是因为数据还在缓冲区,没有真正写到文件中去,也有可能和文件位置有关????求教各位此问题如何解??????
感谢就不说了,分数说明一切!!!
写文件Java

解决方案 »

  1.   

    RandomAccessFile读/写一个字节需对磁盘进行一次I/O操作
    http://www.jspcn.net/htmlnews/11049335395151218.html这个不知道对你有帮助没
      

  2.   

    试试下面的out.getFD().sync();,应该是可以的。private void saveSetResult(int pos){
            String filename = "system/media/bootlogo/logo_pos_record";
            Log.d("BootAnimation", "write:"+Integer.toString(pos+1));
            try {
                RandomAccessFile out = new RandomAccessFile(filename, "rw");
                out.seek(0);
                out.writeBytes(Integer.toString(pos+1));
                out.getFD().sync();
                out.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             
        }
      

  3.   

    对文件目录 system/media/是否有读写权限?
    write之后不需要flush就直接close是否合理?
    表示没有用过RandomAccessFile(),只用过FileOutputStream。
      

  4.   

    linux下有方法直接写到外部存储,android里不清楚
      

  5.   


    flush用过,没效果啊。。
    请问sync如何用????
      

  6.   


    验证后发现有点作用,大概在5s后就会保存,还是达不到要求啊
    说明你一次写入的内容太多了。你要循环着写。一次写入少一点,如1024*8个byte。
    while(XXXX) {
          out.write(1024*8);
          out.getFD().sync();
    }
      

  7.   


    验证后发现有点作用,大概在5s后就会保存,还是达不到要求啊
    说明你一次写入的内容太多了。你要循环着写。一次写入少一点,如1024*8个byte。
    while(XXXX) {
          out.write(1024*8);
          out.getFD().sync();
    }一个Integer能有多少.......估计还是考虑错方向了   问问懂底层驱动的
    还有 只写这么点东西  不需要RandomAccessFile吧  简单的文件读写就够了  
      

  8.   


    验证后发现有点作用,大概在5s后就会保存,还是达不到要求啊
    说明你一次写入的内容太多了。你要循环着写。一次写入少一点,如1024*8个byte。
    while(XXXX) {
          out.write(1024*8);
          out.getFD().sync();
    }一个Integer能有多少.......估计还是考虑错方向了   问问懂底层驱动的
    还有 只写这么点东西  不需要RandomAccessFile吧  简单的文件读写就够了  我也很奇怪,为何楼主不是直接写文件,用这种方式到底在写啥?
      

  9.   


    验证后发现有点作用,大概在5s后就会保存,还是达不到要求啊
    说明你一次写入的内容太多了。你要循环着写。一次写入少一点,如1024*8个byte。
    while(XXXX) {
          out.write(1024*8);
          out.getFD().sync();
    }一个Integer能有多少.......估计还是考虑错方向了   问问懂底层驱动的
    还有 只写这么点东西  不需要RandomAccessFile吧  简单的文件读写就够了  我也很奇怪,为何楼主不是直接写文件,用这种方式到底在写啥?公司网络受限,不能回复,不好意思啊。
    此api是只保存一个整数,不用cotentprovider或其他的原因是保存的数据是在开机时来读取,这时android的service都还没有起来,所有只能以文件方式来保存。java的几种文件操作都试过了。。
    另外,自己用C也谢了一个测试的程序,发现还没有这种方法的存储速度快。。难道无解???????
    首先我说下数据是用户操作时上层保存的,是在java部分实现的,不知道二位说的更简单的方式是什么???
      

  10.   


    验证后发现有点作用,大概在5s后就会保存,还是达不到要求啊
    说明你一次写入的内容太多了。你要循环着写。一次写入少一点,如1024*8个byte。
    while(XXXX) {
          out.write(1024*8);
          out.getFD().sync();
    }一个Integer能有多少.......估计还是考虑错方向了   问问懂底层驱动的
    还有 只写这么点东西  不需要RandomAccessFile吧  简单的文件读写就够了  
    请问简单的文件操作是指什么方法?????
      

  11.   


    验证后发现有点作用,大概在5s后就会保存,还是达不到要求啊
    说明你一次写入的内容太多了。你要循环着写。一次写入少一点,如1024*8个byte。
    while(XXXX) {
          out.write(1024*8);
          out.getFD().sync();
    }一个Integer能有多少.......估计还是考虑错方向了   问问懂底层驱动的
    还有 只写这么点东西  不需要RandomAccessFile吧  简单的文件读写就够了  
    请问简单的文件操作是指什么方法?????
    就是普通的文件读写  new FileOutputStream   
    但是这个估计也不能解决你的问题   可能跟system分区有关系  其他的地方你写了不会需要重启的 是吧  这个分区比较特殊吧