package test.nio;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Date;
/** *//**
* @author lichun
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class FileUtil{
public static ByteBuffer readFile(String filename) throws Exception{
FileChannel fiChannel = new FileInputStream(filename).getChannel();
MappedByteBuffer mBuf;
mBuf = fiChannel.map(FileChannel.MapMode.READ_ONLY, 0, fiChannel.size());
fiChannel.close();
fiChannel = null;
return mBuf;
}
public static void saveFile(ByteBuffer src, String filename) throws Exception{
FileChannel foChannel = new FileOutputStream(filename).getChannel();
foChannel.write(src);
foChannel.close();
foChannel = null;
}
public static void saveFile(FileChannel fiChannel, String filename) throws IOException{
MappedByteBuffer mBuf;
mBuf = fiChannel.map(FileChannel.MapMode.READ_ONLY, 0, fiChannel.size());
FileChannel foChannel = new FileOutputStream(filename).getChannel();
foChannel.write(mBuf);
fiChannel.close();
foChannel.close();
fiChannel = null;
foChannel = null;
}
public static void copyFile(String in,String out) throws IOException{
FileChannel fin=new FileInputStream(in).getChannel();
FileChannel fout=new FileOutputStream(out).getChannel();
fout.transferFrom(fin,0,fin.size());
}
public static long forChannel(String f1,String f2) throws Exception{
long time=new Date().getTime();
int length=3097152;
FileInputStream in=new FileInputStream(f1);
FileOutputStream out=new FileOutputStream(f2);
FileChannel inC=in.getChannel();
FileChannel outC=out.getChannel();
ByteBuffer b=null;
while(true){
if(inC.position()==inC.size()){
inC.close();
outC.close();
return new Date().getTime()-time;
}
if((inC.size()-inC.position())<length){
length=(int)(inC.size()-inC.position());
}else
length=2097152;
b=ByteBuffer.allocateDirect(length);
inC.read(b);
b.flip();
outC.write(b);
outC.force(false);
}
}
public static void main(String[] args) throws Exception {
util.MyTools_common.startTimeDesc();
final String from = "E:\\maying\\test\\HouseStructure.img";
final String to = "E:\\xx.img";
// ByteBuffer byteBuffer = FileUtil.readFile(from);
// FileUtil.saveFile(byteBuffer, to);
// byteBuffer = null;
FileUtil.copyFile(from, to);
// FileUtil.forChannel(from, to);
util.MyTools_common.endTimeDesc();
util.MyTools_common.useTimeDesc();
}
}
package test.nio;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.*;
/** *//**
* @author lichun
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TransferFile{
private String srcFile;
List files = new ArrayList();
ByteBuffer byteBuffer;
public TransferFile(){
createFileNames();
}
private void createFileNames(){
for (int i = 0; i < 10; i++){
files.add(i + "");
}
}
public List getFiles(){
return this.files;
}
public String getSrcFile() {
return srcFile;
}
public void setSrcFile(String srcFile){
this.srcFile = srcFile;
}
public void saveFiles() throws FileNotFoundException{
String tempFile;
for (int i = 0; i < this.files.size(); i++) {
tempFile = "test-files/" + (String)files.get(i) + ".txt";
System.out.println("begin create thread for " + tempFile);
FileChannel fiChannel = new FileInputStream(this.srcFile).getChannel();
WriteFileThread writeFileThread = new WriteFileThread("writeFile", fiChannel, tempFile);
writeFileThread.start();
}
}
public static void main(String[] args) throws Exception {
final String srcFile = "test-files/transferFile.txt";
TransferFile transferFile = new TransferFile();
transferFile.setSrcFile(srcFile);
transferFile.saveFiles();
}
}
package test.nio;
import java.io.IOException;
import java.nio.channels.FileChannel;
/** *//**
* @author lichun
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class WriteFileThread extends Thread{
private FileChannel fiChannel;
private String fileName;
public WriteFileThread(String name){
super(name);
}
public WriteFileThread(String name, FileChannel fiChannel, String fileName){
this(name);
this.fiChannel = fiChannel;
this.fileName = fileName;
}
public void setFiChannel(FileChannel fiChannel){
this.fiChannel = fiChannel;
}
public FileChannel getFiChannel(){
return fiChannel;
}
public void setFileName(String fileName){
this.fileName = fileName;
}
public String getFileName(){
return fileName;
}
public void run(){
System.out.println("in Thread: "+this.getName());
try {
FileUtil.saveFile(this.fiChannel, this.fileName);
} catch (IOException e) {
System.out.println("The file is not founded: "+fileName);
e.printStackTrace();
}
System.out.println("end Thread : "+ this.getName());
}
}