如何将以下代码合并到我当前的现有代码中?

时间:2011-05-01 09:00:27

标签: java android filesize

我的任务是只分配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();

1 个答案:

答案 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);
}