2 syd zh syd_zh 于 2014.11.21 16:44 提问

通过线程用BufferedWriter将系统当前时间写入日志文件失败,求大神指导

String path = "d:/log";
public synchronized void write(){

try {

file = new File("d:/log/"+time+".log");
file.createNewFile();
fw = new FileWriter(file);
bw = new BufferedWriter(fw);

bw.write(time,14,3);
} catch (IOException e) {
e.printStackTrace();
} finally{
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
notifyAll();
}

不知道问题出在哪里,没法把毫秒的时间写进去,也没法把文件移到另一个文件夹并删掉原来的文件
求大神指导

4个回答

dopota1
dopota1   2014.11.21 17:13

转义字符的影响,导致是路径错误。用反斜杠\ 或者前缀@:@"d:/log/"+time+".log"

caozhy
caozhy   Ds   Rxr 2014.11.21 17:14

time是什么,里面是否包含冒号等作为文件名来说非法的字符,另外e.printStackTrace();,那么你把错误和堆栈贴出来啊。

caozhy
caozhy   Ds   Rxr 2014.11.21 17:15

另外Windows使用\反斜杠作为路径分割,如果你使用Windows而不是Linux的话,需要修改。

eagleyan
eagleyan   Rxr 2014.12.01 05:42

你问了2个问题

  1. 没法把毫秒的时间写进去,我猜你是说在程序运行过程中,你用tail或者其他方式并没看到时间,这个是正确的,因为BufferedWriter本来用的就是buffer,buffer满了才会写,如果你立刻希望看到输出,那你应该采用 PrintWriter pw = new PrintWriter(fw);
  2. 没法把文件移到另一个文件夹并删掉原来的文件, 我猜你是想在执行过程中做这件事,这是因为windows操作系统本省进程是独占文件的。当进程还没有关闭文件的时候,文件是被锁住的。有的时候即使你做了close,操作系统也不一定立刻真的释放了这个资源。这是windows的特性,在linux/unix/mac上并没有这个问题。
Csdn user default icon
上传中...
上传图片
插入图片