【问题标题】:android - pre-allocate space for a file before downloading itandroid - 在下载文件之前为文件预先分配空间
【发布时间】:2012-02-12 20:21:27
【问题描述】:

如何在 android 上创建预分配文件?类似于稀疏文件的东西?

我需要制作一个下载大文件的应用程序,并且我想避免在下载开始时出现空间不足错误。我的解决方案需要支持恢复和写入内部和外部存储。

我试过这里写的: Create file with given size in Java 但由于某种原因,这些解决方案都不起作用。

【问题讨论】:

  • 不要只说没有某种原因,显示你尝试的代码和你得到的错误,这样你更有可能得到答案跨度>
  • 好吧,我已经尝试了与链接中给出的几乎完全相同的代码。
  • 所以你应该在你的问题中展示它,在一个Android示例中。解释为什么它不起作用或日志显示了什么
  • 没关系。必须再做一次,由于某种原因它现在可以工作了。想知道我的问题的原因是什么。我不记得了。对不起。
  • 也许它在某些设备上不起作用,并使文件的字节大小为 0。需要进一步检查。

标签: android file space sparse-file


【解决方案1】:

这很奇怪。 它现在工作正常。也许我以错误的方式对其进行了测试。

这是一个有效的代码,对于那些有问题的人:

final String path=getFilesDir().getParent()+"/t.txt";
RandomAccessFile newSparseFile=null;
try
  {
  new File(path).delete();
  newSparseFile=new RandomAccessFile(path,"rw");
  // create a 1MB file:
  newSparseFile.setLength(1024*1024);
  }
catch(final Exception e)
  {
  Log.e("DEBUG","error while creating file:"+e);
  }
finally
  {
  if(newSparseFile!=null)
    try
      {
      newSparseFile.close();
      Log.d("DEBUG","length:"+new File(path).length());
      }
    catch(final IOException e)
      {
      Log.e("DEBUG","error while closing file:"+e);
      }
  }

【讨论】:

  • 似乎充其量是不可靠的,需要检查 setLength 是否有效,如果没有足够的空间,我发现大小将保持为 0,或者它会比预期的小但不会占用所有空间磁盘空间。
  • 那么你有没有发现它是完全可靠的还是完全没用的?我所做的任何测试都没有希望......
  • 我最近没用过。你是说它根本不起作用?
  • 我没有测试太多,它似乎适用于小文件。我尝试使用非常大的 long 来制作几 GB 大小的文件,但它只是做了 400 字节或 0 字节之类的东西。
  • @schwiz 我现在已经尝试过了,即使是 1GB 也能正常工作。我已经更新了代码以表明它是正确的。如果它不适合你,也许它在不同的设备上以不同的方式工作。也许您可以直接跳到文件的最后一个字节并在那里写一些东西,然后返回。对我来说,我在这里编写的代码在带有 Android 4.1.2 的 Galaxy S3 上运行良好。例如,如果我将大小设置为 1GB (1024*1024*1024),它就会变成这个大小。我什至可以使用“总指挥官”应用程序查看文件大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多