我的任务是只分配1GB的空间来将我的视频存储在特定的文件目录中,一旦它达到/达到1GB,它将自动删除该目录中最旧的视频文件?
我最终找到了这些代码但是我在如何将这些示例1/2代码合并到我当前现有的mainActivity.java文件中时遇到了问题,因为与其他示例相比,“dirlist,tempFile”等名称存在差异1/2用于执行大小检查和删除任务。
抱歉,我是android / java的新手,因此我真的不知道要改变哪些“字段”以满足我当前的编码需求?有人可以帮助我如何将这些代码集合成一组执行上述功能的代码吗?
My Current has mainActivity.java
File dirlist = new File(Environment.getExternalStorageDirectory() + "/VideoList");
if(!(dirlist.exists()))
dirlist.mkdir();
File TempFile = new File(Environment.getExternalStorageDirectory()
+ "/VideoList", dateFormat.format(date) + fileFormat);
mediaRecorder.setOutputFile(TempFile.getPath());
(示例1)用于汇总给定文件夹中的目录文件大小的代码..
private static long dirSize(File dir) {
long result = 0;
Stack<File> dirlist= new Stack<File>();
dirlist.clear();
dirlist.push(dir);
while(!dirlist.isEmpty())
{
File dirCurrent = dirlist.pop();
File[] fileList = dirCurrent.listFiles();
for (int i = 0; i < fileList.length; i++) {
if(fileList[i].isDirectory())
dirlist.push(fileList[i]);
else
result += fileList[i].length();
}
}
return result;
}
(示例2)用于获取数组中所有文件的代码集,并根据其修改/创建日期对它们进行排序。然后,数组中的第一个文件是最旧的文件并将其删除。
// no idea what are the parameters i should enter
// here for my case in mainActivity??
File directory = new File((**String for absolute path to directory**);
File[] files = directory.listFiles();
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File f1, File f2)
{
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}});
file[0].delete();
答案 0 :(得分:1)
这是对您上一个问题的引用:How do I put a capped maximum directory storage space in SD?。将来,您应该在同一个问题中继续讨论相同的主题,而不是创建2个新的相同问题。
在Activity类中,我们假设您定义了以下两种方法:
private void deleteOldestFile(File directory)
{
File[] files = directory.listFiles();
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File f1, File f2)
{
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}});
files[0].delete();
}
private static long dirSize(File dir) {
long result = 0;
File[] fileList = dir.listFiles();
for(int i = 0; i < fileList.length; i++) {
if(fileList[i].isDirectory()) {
result += dirSize(fileList [i]);
} else {
// Sum the file size in bytes
result += fileList[i].length();
}
}
return result;
}
您现在可以使用您的代码执行此操作:
File dirlist = new File(Environment.getExternalStorageDirectory() + "/VideoList");
if(!(dirlist.exists()))
dirlist.mkdir();
Long directorySize = dirSize(dirlist);
if (directorySize > 1073741824) // this is 1GB in bytes
{
deleteOldestFile(dirlist);
}
File TempFile = new File(Environment.getExternalStorageDirectory()
+ "/VideoList", dateFormat.format(date) + fileFormat);
mediaRecorder.setOutputFile(TempFile.getPath());
因此,在将输出文件设置在该文件夹之前,它会检查文件夹是否为&gt; 1GB,如果是,则首先删除最旧的文件。
说实话,删除最旧的文件可能不必然会使目录大小while (directorySize > 1073741824)
{
deleteOldestFile(dirlist);
direcotrySize = dirSize(dirlist);
}