利用Java中的java.nio.channels.WritableByteChannel的方法来实现写文件,通过通道可以设定通道的使用方式,从而决定写文件的方式。具体实现代码如下:
import static java.nio.file.StandardOpenOption.*;
import java.nio.file.*;
import java.io.*;
import java.nio.channels.*;
import java.nio.ByteBuffer;
import java.util.*;
public class WriteProverbs {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
String[] sayings = {"Teacher: Kids,what does the chicken give you?",
"Student: Meat!",
"Teacher: Very good! Now what does the pig give you?",
"Student: Bacon!",
"Teacher: Great! And what does the fat cow give you?",
"Student: Homework!" };
Path file = Paths.get(System.getProperty("user.home")).resolve(
"Beginning Java Stuff").resolve("Proverbs.txt");
try {
Files.createDirectories(file.getParent());
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
int maxLength=0;
for(String saying:sayings){
if(maxLength<saying.length())
{
maxLength=saying.length();
}
}
ByteBuffer buf=ByteBuffer.allocate(1024);//分配的空间一定要大于字符串字长
try{
WritableByteChannel channel=Files.newByteChannel(file,EnumSet.of(CREATE,WRITE,APPEND));//EnumSet是设定通道的使用方式,APPEND是在原有的内容后面写
for(String saying:sayings){
buf.put(saying.getBytes());
buf.flip();
channel.write(buf);
buf.clear();
}
System.out.println("Proverbs written to file.");
}catch(IOException e){
e.printStackTrace();
}
}
}
使用APPEND实现结果如下: