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

时间:2013-02-03 09:47:36

标签: java io

我开发了一个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));
    }

}

以上存在的实施被评论的工作不正确现在请指教

1 个答案:

答案 0 :(得分:0)

我很满意你的确切要求。考虑这个小例子:

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();,中断,创建文件然后继续应用程序,它似乎甚至不会抛出异常。我想知道为什么..