我只希望fileoutputstream像filewriter一样风格
像这样//filewriter code
try {
File file = ('some file link');
fw=new FileWriter(file,true);
fw.write("2017-06-08");
fw.write("#");//separator
fw.write("ABCD");
fw.write("#");//separator
fw.write("\r\n");
fw.flush();
}
是在文件中回答:: 2017-06-08#ABCD#
但我想要文件锁,所以请使用fos& channel。
try {
//date = string "2017-06-08", menu= string"ABCD"
fos = new FileOutputStream('file_addr',true);
channel = fos.getChannel();
lock=channel.tryLock();
//if (lock==null){ //<- not yet work
// channel.close();
// throw new Exception();
//}
ByteBuffer buf = ByteBuffer.allocate(512);
for (char ch : date.toCharArray())
buf.putChar(ch);
buf.putChar('#');
for (char ch : menu.toCharArray())
buf.putChar(ch);
buf.putChar('\r');
buf.putChar('\n');
buf.rewind();
channel.write(buf);
//if (lock!=null){
// lock.release();
// channel.close();
//}
但不起作用。输出是&#39; 2 0 1 7 - 0 6 - 0 8&#39;(和粉碎)
怎么写这样的&#39; 2017-06-08#ABCD#&#39;使用fos&amp; filechannel?
答案 0 :(得分:0)
ByteBuffer.putChar()的文档解释了您遇到的问题。
以当前字节顺序将包含给定char值的两个字节写入当前位置的此缓冲区,然后将位置递增2。
换句话说,putChar()写一个UTF-16字符(以便可以使用getChar()读取)。这可能不是你想要的。
如果你的所有字符都在ascii中,你可以简单地通过强制它们将它们写成单个字节。 buf.put((byte)ch)应该能满足你的期望。