gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:51:57 24 4
gpt4 key购买 nike

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

最佳答案

这是对您之前问题的引用:How do I put a capped maximum directory storage space in SD? 。以后,您应该在同一问题中继续讨论同一主题,而不是创建 2 个新的相同问题。

在您的 Activity 类中,假设您定义了这 2 个方法:

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,如果是,则首先删除最旧的文件。

说实话,删除最旧的文件可能不一定使目录大小< 1GB,所以我会使用 while 循环来确保它< 1GB,如下所示:

while (directorySize > 1073741824)
{
deleteOldestFile(dirlist);
direcotrySize = dirSize(dirlist);
}

关于java - 如何将下面的这些代码合并到我当前的现有代码中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com