Java 关于目录中文件的交叉检查

Java 关于目录中文件的交叉检查,java,io,Java,Io,我开发了一个java程序,将文件从源文件夹复制到目标文件夹 它将10个序列化文件从源文件夹复制到目标文件夹 但其中缺少的一点是,假设目标文件夹中已经存在文件,那么在这种情况下,它就不应该复制 因此,基本上在一秒钟内完成检查,检查目标文件夹是否包含这10个序列化文件 若并没有,那个么在这种情况下,只有它应该复制,复制后,它应该在第二秒内再次检查文件是否存在,请建议如何实现这一点 //Create a class extends with TimerTask class ScheduledTask

我开发了一个java程序,将文件从源文件夹复制到目标文件夹 它将10个序列化文件从源文件夹复制到目标文件夹

但其中缺少的一点是,假设目标文件夹中已经存在文件,那么在这种情况下,它就不应该复制 因此,基本上在一秒钟内完成检查,检查目标文件夹是否包含这10个序列化文件 若并没有,那个么在这种情况下,只有它应该复制,复制后,它应该在第二秒内再次检查文件是否存在,请建议如何实现这一点

//Create a class extends with TimerTask
class ScheduledTask extends TimerTask {

    public void run() {
        InputStream inStream = null;
        OutputStream outStream = null;

        try {
            File source = new File("C:\\cache\\");
            File target = new File("C:\\Authclient\\cache\\");

            // Already exists. do not copy
            /*if (target.exists()) { 
                return;
            }*/

            File[] files = source.listFiles();
            for (File file : files) {
                inStream = new FileInputStream(file);
                outStream = new FileOutputStream(target + "/" + file.getName());

                byte[] buffer = new byte[1024];
                int length;
                // copy the file content in bytes
                while ((length = inStream.read(buffer)) > 0) {
                    outStream.write(buffer, 0, length);
                }
                inStream.close();
                outStream.close();
            }
            System.out.println("File is copied successful!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public class Copycache {
    public static void main(String args[]) throws InterruptedException  {
        Timer time = new Timer();
        ScheduledTask task = new ScheduledTask();
        time.schedule(task, new Date(), TimeUnit.SECONDS.toMillis(1));
    }

}

上述已存在的实施方案被评论为无法正常工作,请告知

我很好奇您的确切要求。考虑这个小例子:

File file = new File("test.txt");
if (!file.exists())
{
    FileOutputStream fis = new FileOutputStream(file);
    fis.write("blabla".getBytes());
    fis.close();
}
现在在FileOutputStream fis行上放置一个断点。。。 运行它并在断点处等待,然后手动创建test.txt并将一些数据放入其中。 然后继续运行程序

您的程序将在没有警告的情况下覆盖test.txt的内容

如果时机如此关键,你需要想出一个不同的解决方案


编辑:我很好奇,又做了一些测试。如果添加行
file.createNewFile(),它似乎甚至不会抛出异常,在此处中断,创建文件,然后继续应用程序。我想知道为什么..

为什么复制后要再次检查文件是否存在?如果复制失败,则会出现异常,无需再次检查。