A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. import java.io.RandomAccessFile;
  5. [code]import java.io.File;
  6. import java.io.FileNotFoundException;
  7. import java.io.IOException;

  8. public class FileCutter {
  9.         private long len; // 文件总大小
  10.         private long perLen; // 每一份文件的大小
  11.         private long startPos; // 开始时索引
  12.         private long endPos; // 结束索引

  13.         /**
  14.          * 切割文件
  15.          *
  16.          * @param srcFile
  17.          *            源文件
  18.          * @param desPath
  19.          *            目标路径
  20.          * @param num
  21.          *            将文件分为几份
  22.          * @throws IOException
  23.          * @throws FileNotFoundException
  24.          */
  25.         public void cut(File srcFile, int num) throws FileNotFoundException,
  26.                         IOException {

  27.                 // 文件总大小
  28.                 len = srcFile.length();

  29.                 perLen = len / num;

  30.                 startPos = 0L;
  31.                 endPos = perLen;

  32.                 System.out.println(perLen + "------");
  33.                 // 将文件切割为num份,依次切割
  34.                 for (int i = 0; i < num; i++) {
  35.                         new Copyer(srcFile, startPos, endPos, "droid" + i).copy();

  36.                         startPos += perLen;

  37.                         if (i == (num - 2)) {
  38.                                 endPos = len;
  39.                         } else {
  40.                                 endPos += perLen;
  41.                         }
  42.                         System.out.println("start: " + startPos + "  end: " + endPos + i);
  43.                 }

  44.         }
  45. }
复制代码
public class Copyer {
        private File srcFile; // 目标文件
        private long startPos; // 开始索引
        private long endPos; // 结束索引
        private long hasCopyed; // 已经复制的文件的索引
        private long len; // 文件总大小
        private RandomAccessFile rIn;
        private RandomAccessFile rOut;
        private String desName; //各文件名称

        public Copyer(File srcFile, long startPos, long endPos, String desName) {
                this.srcFile = srcFile;
                this.startPos = startPos;
                this.endPos = endPos;
                hasCopyed = startPos;
                this.desName = desName;
        }

        public void copy() throws FileNotFoundException, IOException {

                try {
                        // 只读
                        rIn = new RandomAccessFile(srcFile, "r");
                        // 只读写
                        rOut = new RandomAccessFile(desName, "rw");

                        len = srcFile.length();

                        rIn.seek(startPos);
                        rOut.seek(startPos);

                        int i = 0;
                        int sum = 0;
                        byte[] buff = new byte[1024 * 1024 * 24];
                        while (((i = rIn.read(buff)) != -1) && endPos <= len) {
                                if (hasCopyed + i > endPos) {
                                        i = (int) (endPos - hasCopyed);
                                }
                                hasCopyed += i;
                                // startPos = hasCopyed;

                                rOut.write(buff, 0, i);
                                sum += i;
                                System.out.println("每次大小: " + sum);
                        }
                        // System.out.println("startPos: " + startPos + "        endPos: " +
                        // endPos);
                } finally {
                        if (rIn != null) {
                                rIn.close();
                        }
                        if (rOut != null) {
                                rOut.close();
                        }
                }
        }
}[/code]

1 个回复

倒序浏览
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;

  4. public class Main {

  5.         /**
  6.          * @param args
  7.          */
  8.         public static void main(String[] args) {
  9.                 try {
  10.                         new FileCutter().cut(new File("d:\\test\\android.zip"), 10);
  11.                 } catch (FileNotFoundException e) {
  12.                         e.printStackTrace();
  13.                 } catch (IOException e) {
  14.                         e.printStackTrace();
  15.                 }
  16.         }

  17. }
复制代码
需求:将android.zip文件平均分为10份,第10份大小与前9份可能不相同。
但得到的文件大小比依次是1:2:4:6:8:10:12:14:16:18:20。不知道问题出现在哪里?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马