【问题标题】:Split Array of Files if exceeds the maximum limit如果超过最大限制,则拆分文件数组
【发布时间】:2014-10-22 03:34:05
【问题描述】:

我想按大小拆分文件数组。我设置的最大大小是 4MB。 如果总大小 List。

这是我的方法:

public List<File> fileSplit(File [] files, long maxAttachmentSize) {
        int i = 0;
        long totalAttachmentSize = 0;

        List<File> list = new ArrayList<File>();
        for (int j = 0; j < files.length; j++) {
            File file = files[i];
            totalAttachmentSize += file.length();

            list.add(file);

            if (totalAttachmentSize > maxAttachmentSize) {
                //part += 1;
                break;
            }

        }

        return list;
}

这是我的数组:

String [] attachments = {
                "/Users/fanjavaid/Documents/data.json",
                "/Users/fanjavaid/Documents/master.psd",
                "/Users/fanjavaid/Pictures/ceria.jpg",
                "/Users/fanjavaid/Desktop/All Data LM.dsv",     
                "/Users/fanjavaid/Desktop/LM August 01 - Now.xlsx",
                "/Users/fanjavaid/Desktop/Email_GoGreen.png",
                "/Users/fanjavaid/Desktop/Archive.zip",
                "/Users/fanjavaid/Desktop/Email_Veri2144202172009.zip",
                "/Users/fanjavaid/Desktop/Screenshot Collection.zip",
                "/Users/fanjavaid/Desktop/logo-big.jpg",
                "/Users/fanjavaid/Desktop/Mbak Putri.psd"
        };

        File [] files = convertToFile(attachments);
        Arrays.sort(files, SizeFileComparator.SIZE_COMPARATOR);

.... ....

我这样调用方法:

long maxAttachmentSize = 4194304; // in bytes
List<File> resultSplit = fileSplit(files, maxAttachmentSize);

问题是它没有返回 List 作为一部分。它只是返回所有列表。不是一个个部分分开。 如何处理?

谢谢。

【问题讨论】:

  • 请粘贴您的预期输出
  • 看在上帝的份上,您将所有文件添加到列表中,您还能期待什么?
  • 我的预期结果是,对于电子邮件拆分器。所以我只需要一些包含文件每个部分的列表。 List_1 = file1, file2, file3 ... List_2 = file4, file5... 以此类推,每个 List 不超过最大大小 4MB。
  • 您甚至在检查totalAttachmentSize 是否会超过maxAttachmentSize 之前添加文件!
  • @Neo 我已经检查了这个声明if (totalAttachmentSize &gt; maxAttachmentSize) { break; }

标签: java arrays arraylist split


【解决方案1】:

假设没有文件大于最大大小,您可以这样做

public List<List<File>> fileSplit(File [] files, long maxAttachmentSize) {
  long totalAttachmentSize = 0;

  List<List<File>> allLists = new ArrayList<>();

  List<File> currList = new ArrayList<File>();
  allLists.add(currList);
  for (File file : files) {
    long fileSize = file.length();
    if ((totalAttachmentSize + fileSize) <= maxAttachmentSize) {
      currList.add(file);
      totalAttachmentSize += fileSize;
    } else {
      totalAttachmentSize = fileSize;
      currList = new ArrayList<File>();
      allLists.add(currList);
      currList.add(file); // assuming no file is bigger than maxAttachmentSize
    }
  }

  return allLists;
}

【讨论】:

  • 只是一个观察:我认为 fanjavaid 在添加当前列表时希望标准为
猜你喜欢
  • 2021-07-02
  • 2013-11-12
  • 2013-03-04
  • 2017-07-31
  • 1970-01-01
  • 2022-07-22
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多