Java 为什么';t PrintWriter使用Thread.sleep()工作
PrintWriter工作(它写入外部文件),直到我添加一行,上面写着Java 为什么';t PrintWriter使用Thread.sleep()工作,java,sleep,Java,Sleep,PrintWriter工作(它写入外部文件),直到我添加一行,上面写着Thread.sleep(100)。然后代码仍然可以正常编译,并继续写入控制台,但不会打印到外部文件。但我不明白为什么 import java.io.*; import java.io.PrintWriter; import java.io.File; import javax.swing.*; public class RecordMouse { public static void main(String[] ar
Thread.sleep(100)代码>。然后代码仍然可以正常编译,并继续写入控制台,但不会打印到外部文件。但我不明白为什么
import java.io.*;
import java.io.PrintWriter;
import java.io.File;
import javax.swing.*;
public class RecordMouse {
public static void main(String[] args) throws InterruptedException{
String line = "";
// string for filename
String filename = System.currentTimeMillis() + "out.txt";
// create file
File file = new File(filename);
// create writer
PrintWriter printWriter = null;
try
{
printWriter = new PrintWriter(file);
while(true){
//Thread.sleep(100);
System.out.println(System.currentTimeMillis() + " hi \n");
printWriter.println(System.currentTimeMillis() + " hi");
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
finally
{
if ( printWriter != null )
{
printWriter.close();
}
}
}
}
在您的情况下,sleep
的区别在于,它会降低写入的频率,并且需要一段时间才能将写入刷新到文件中。通过删除睡眠
,您将导致写刷新发生得更早。将睡眠时间更改为较小的时间(例如5而不是100),或者稍等一会,然后查看文件是否被写入。睡眠的不同之处在于它会降低写入频率,并且需要一段时间才能将写入刷新到文件中。通过删除睡眠
,您将导致写刷新发生得更早。将睡眠时间更改为较小的值(如5而不是100),或稍等一会,然后查看文件是否被写入。当文件工作时,它会做什么?当它不起作用时它会做什么?什么不起作用Thread.sleep()
抛出InterruptedException
,而您的代码没有捕获该类型的异常。它在标题中。我会在帖子中详细说明。@Mike我不明白为什么这会是个问题。main
方法声明它抛出InterruptedException
。我上一个关于删除循环的问题的原因与文件刷新有关。它工作时做什么?当它不起作用时它会做什么?什么不起作用Thread.sleep()
抛出InterruptedException
,而您的代码没有捕获该类型的异常。它在标题中。我会在帖子中详细说明。@Mike我不明白为什么这会是个问题。main
方法声明它抛出InterruptedException
。我前面关于删除循环的问题的原因与文件刷新有关。或者为每个循环迭代添加刷新调用。谢谢。我不明白的问题是流和缓冲区之间的区别。或者缓冲区最终会转储。更改睡眠时间是不可取的,因为我不需要那么多数据,但我能够添加printWriter.flush()@StephenC建议将缓冲数据刷新到文件中。或者为每个循环迭代添加刷新调用。谢谢。我不明白的问题是流和缓冲区之间的区别。或者缓冲区最终会转储。更改睡眠时间是不可取的,因为我不需要那么多数据,但我能够添加printWriter.flush()@StephenC建议将缓冲数据刷新到文件中,将代码>添加到循环中。