package com.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class GetChannel1 {
private static int BSIZE = 1024;
public static void main(String[] args) throws Exception {
GetChannel1 getChannel1 = new GetChannel1();
getChannel1.writeFile("file.txt", "hello,");
getChannel1.addToFile("file.txt", "world");
getChannel1.readFile("file.txt");
}
public void readFile(String fileName) throws IOException {
FileChannel fc = new FileInputStream(fileName).getChannel();
ByteBuffer buff = ByteBuffer.allocate(BSIZE);
fc.read(buff);
/**
* Flips this buffer. The limit is set to the current position
* and then the position is set to zero.
* If the mark is defined then it is discarded.
After a sequence of channel-read or put operations,
invoke this method to prepare for a sequence of channel-write
or relative get operations.
*/
buff.flip();
/*
* Tells whether there are any elements between the current position and the limit.
*/
while (buff.hasRemaining()) {
System.out.print((char) buff.get());
}
fc.close();
}
// 向文件中增加内容
public void addToFile(String fileName, String content) throws IOException {
FileChannel fc = new RandomAccessFile(fileName, "rw").getChannel();
fc.position(fc.size());
fc.write(ByteBuffer.wrap(content.getBytes()));
fc.close();
}
// 写文件
public void writeFile(String fileName, String content) throws FileNotFoundException, IOException {
FileChannel fc = new FileOutputStream(fileName).getChannel();
fc.write(ByteBuffer.wrap(content.getBytes()));
fc.close();
}
}