【发布时间】:2017-06-07 16:17:00
【问题描述】:
我只想要 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();
//}
但不起作用。输出是'2 0 1 7 - 0 6 - 0 8'(和粉碎)
如何使用 fos 和 filechannel 编写像这样的 '2017-06-08#ABCD#'?
【问题讨论】:
-
这是您使用 Unicode 字符集的 UTF-16 编码编写的问题和/或不知道如何验证?见ByteBuffer.putChar(char)。您如何得出结论是“2 0 1 7 - 0 6 - 0 8”?
-
我检查了书面文件。在那个文件中。书面字符串是“2 0 1 7 -”,而不是“2017-”+ 我会检查你的链接。谢谢
-
当一个文本文件被写入时,它具有特定的字符编码。当您阅读它时,您必须使用相同的编码。 (编辑和人们喜欢猜测。调试人员喜欢假设一些简单的事情。除非他们是对的,否则他们都是错的。)
标签: java fileoutputstream filechannel