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

Posted

技术标签:

【中文标题】如何将以下这些代码合并到我当前的现有代码中?【英文标题】:How do i incorporate these code below into my current existing codes? 【发布时间】:2011-05-01 09:00:27 【问题描述】:

我的任务是只分配 1GB 的空间来将我的视频存储在一个特定的文件目录中,一旦它即将达到/达到 1GB,它将自动删除该目录中最旧的视频文件?

我最终找到了这些代码,但是由于与其他示例相比,“dirlist,tempFile”等名称存在差异,我遇到了如何将这些示例 1/2 代码合并到我当前现有的 mainActivity.java 文件中的问题1/2 用于执行大小检查和删除任务。

抱歉,我是 android/java 的新手,因此我真的不知道要更改哪些“字段”以适应我当前的编码需求?有人可以帮助我如何将这些代码集编译成一组执行上述功能的代码吗??

我当前现有的 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();

【问题讨论】:

也不要两次发布本质上相同的问题。并请展示您尝试过的内容、遇到的错误等...这些代码 sn-ps 没有什么特别之处,这会使它们难以在任何地方集成。 @Mat 问题是到目前为止我几乎只有 6 周的 android/java 编程经验,这让我成为一个新手,不知道我应该在上面进行什么更改以适应我的代码.. . 海兹 :( 【参考方案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());

因此,在该文件夹中设置输出文件之前,它会检查该文件夹是否 > 1GB,如果是,则首先删除最旧的文件。

说实话,删除最旧的文件可能不一定会使目录大小

while (directorySize > 1073741824)

  deleteOldestFile(dirlist);
  direcotrySize = dirSize(dirlist);

【讨论】:

嘿,您的解决方案工作正常 :) 但我在这里有一个小问题,为什么语句 "dirlist.length" [for(int i = 0; i 道歉应该是“filelist.length”,我在答案中更正了。 真的非常感谢你 :) 但是很抱歉再次打扰你,你能访问这个链接吗--> 解决我的另一个问题***.com/questions/5791901/… 因为我也想要“动态”间隔录制从偏好和问题也将其集成到代码中......

以上是关于如何将以下这些代码合并到我当前的现有代码中?的主要内容,如果未能解决你的问题,请参考以下文章

C# 试图弄清楚如何将负值合并到我的代码中

如何将本地未提交的更改合并到另一个 Git 分支?

您如何合并已恢复的提交?

合并原始联系人

如何合并 MFCC

如何将大量小文件合并为一个文件