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(); } }