package com.yangtao.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;

public class TestFile {

    
private static int SIZE = 1024 * 1024 * 2;

    
public void move(File srcFile, File destFile) {

        
try {
            
int length = SIZE;
            FileInputStream in 
= new FileInputStream(srcFile);
            FileOutputStream out 
= new FileOutputStream(destFile);
            FileChannel inC 
= in.getChannel();
            FileChannel outC 
= out.getChannel();
            
while (true) {
                
if (inC.position() == inC.size()) {
                    in.close();
                    out.close();
                    inC.close();
                    outC.close();
                    
break;
                }
                
if ((inC.size() - inC.position()) < SIZE * 10) {
                    length 
= (int) (inC.size() - inC.position());
                    
// taskManager.changeoffset(id, 100);
                } else {
                    length 
= SIZE * 10;
                }
                inC.transferTo(inC.position(), length, outC);
                inC.position(inC.position() 
+ length);
            }
        } 
catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
catch (IOException e) {
            e.printStackTrace();
        }

    }

    
public void runUnFinished(File srcFile, File destFile) {
        
if (destFile.exists()) {
            
try {
                
                RandomAccessFile randomSrcFile 
= new RandomAccessFile(srcFile,"rw");
                
long destFileSize = destFile.length();
                
                RandomAccessFile randomDestFile 
= new RandomAccessFile(destFile, "rw");
                randomSrcFile.seek(destFileSize 
- 1024 * 2);
                randomDestFile.seek(destFileSize 
- 1024 * 2);
                FileChannel fin 
= randomSrcFile.getChannel();
                FileChannel fout 
= randomDestFile.getChannel();

//                fin.position(destFileSize);
                
                
while (true) {
                    
int length = SIZE;

                    
if (fin.position() == fin.size()) {
                        fin.close();
                        fout.close();
                        
break;
                    }

                    
if ((fin.size() - fin.position()) < SIZE * 10) {
                        length 
= (int) (fin.size() - fin.position());
                        
// taskManager.changeoffset(id, 100);
                    } else {
                        length 
= SIZE * 10;
                    }
                    fin.transferTo(fin.position(), length, fout);
                    fin.position(fin.position() 
+ length);
                }
            } 
catch (FileNotFoundException e) {
                e.printStackTrace();
            } 
catch (IOException e) {
                
// TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    
public static void main(String[] args) {
        TestFile testFile 
= new TestFile();
//        testFile.move(new File("F:\\dest1\\CentOS-5.5-i386-bin-DVD.iso"), new File("E:\\CentOS-5.5-i386-bin-DVD.iso"));
        testFile.runUnFinished(new File(
                
"F:\\dest1\\CentOS-5.5-i386-bin-DVD.iso"), new File(
                
"E:\\CentOS-5.5-i386-bin-DVD.iso"));
    }
}