package Java2入门经典char10;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.Formatter;public class UsingAFormatter { /**
 * @param args
 */
public static void main(String[] args) {
String[] phrases={"Rome wasn't burned in a day.",
"it's a bold mouse that sits in the cat's ear.",
"An ounce of practice is worth a pound of instruction."
};
String dirname ="e:/project";
String filename="wzyaa.txt";
File dir=new File(dirname);
if(!dir.exists()){
if(!dir.mkdir()){
System.out.println("cann't create directory:"+dirname);
System.exit(1);
}
}
else if(!dir.isDirectory()){
System.err.println(dirname+"is a directory");
System.exit(1);

}
File aFile=new File(dirname,filename);
FileOutputStream outputFile=null;
try{
outputFile=new FileOutputStream(aFile, true);
System.out.println("File stream created successfully.");

}catch(FileNotFoundException e){
e.printStackTrace(System.err);
}
FileChannel outchannel=outputFile.getChannel();
ByteBuffer buf=ByteBuffer.allocate(1024);
System.out.println("\nByte buffer");
System.out.printf("position =%2d limit = %4d capacity =%4d%n",
buf.position(),buf.limit(),buf.capacity());
CharBuffer charBuf=buf.asCharBuffer();
System.out.println("Char view buffer:");
System.out.printf("position=%2d Limit=%4d capacity=%4d%n",
charBuf.position(),charBuf.limit(),charBuf.capacity());
//FileChannel outChannel=outputFile.getChannel();
Formatter formatter=new Formatter(charBuf);
int number =0;
for(String phrase:phrases){
//charBuf.put(phrase);
//outChannel.write(charBuf);
//buf.clear();
formatter.format("%nProverb%3d: %s",++number,phrase);//为什么会抛出异常呢?
System.out.println("\nView buffer after loading:");
System.out.printf("position =%2d limit=%4d capacity=%4d%n",
charBuf.position(),charBuf.limit(),charBuf.capacity());
charBuf.flip();
System.out.println("View buffer after flip");
System.out.printf("position=%2d limit=%4d capacity=%4d%n",
charBuf.position(),charBuf.limit(),charBuf.capacity());
buf.limit(2*charBuf.length());
System.out.println("Byte buffer after limit update:");
System.out.printf ("position=%2d limit=%4d capacity=%4d%n",
buf.position(),buf.limit(),buf.capacity());
}
try{
outchannel.write(buf);
System.out.println("Buffer contents written to file.");
buf.clear();
charBuf.clear();

}catch(IOException e){
e.printStackTrace(System.err);
System.exit(1);
}
try{
outputFile.close();

}catch(IOException e){
e.printStackTrace(System.err);
}
// TODO Auto-generated method stub
}
}我研究了半天实在是搞不懂什么原因了,有2个问题
(1)formatter.format("%nProverb%3d: %s",++number,phrase);在这一句中为什么会报出java.nio.BufferOverflowException,应该是越界的意思吧
(2)nProverb%3d:是哪一种格式输出啊,我GOOGLE了一下没找到!
哪个高手教教我这个小菜鸟啊!