• File的renameTo操作备忘


    1.src.renameTo(dest)  //java中重命名文件或文件夹的方法。类似于linux中的mv命令。重命名的操作很重要。比如存在下面的场景,一个源将内容同步到目标,并且同时有线程阻塞处理目标中的内容。并且处理的前提条件是目标内容是完全同步过之后才处理。

    这种场景最适合renameTo,先将源内容rsync到一个中间的文件夹,然后renameTo中间的文件夹为目标文件夹,应用程序只判断目标文件夹是否存在,一旦存在,就表明里面的内容也是完整的。这样的方式要好于将源直接同步到目标,由于存在同步的过程,导致应用程序读数据错误。

    import java.io.File;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class TestFile implements Runnable
    {
    
        File file;
        File file2;
    
        public TestFile()
        {
            try
            {
                ExecutorService exec = Executors.newSingleThreadExecutor();
                exec.execute(this);
                exec.shutdown();
            }
            catch (Exception ex)
            {
                System.out.println(ex);
            }
        }
    
        public void init()
        {
    
            System.out.println("do some init");
            file = new File("/tmp/middle");
            file2 = new File("/tmp/dest");
        }
    
        public static void main(String[] args) throws Exception
        {
            // main用来模拟linux里面的mv操作。这里的main方法可以改良成crontab定时执行mv操作。mv与renameTo一样的重要!!!一样的使用场景。
            // linux:当源不存在的时候,会报错。目标路径不存在的话,也没有关系,会按目标路径去重命名。
            // windows:不允许应用程序重命名文件夹。本身基于安全和文件索引等考虑。
            // 如果dest为null,将抛出NPE.
            TestFile tf = new TestFile();
            tf.init();
            System.out.println(tf.file.isDirectory() + "|" + tf.file2.isDirectory());
            System.out.println(tf.file.renameTo(tf.file2));
        }
    
        @Override
        public void run()
        {
            while (true) // block
            {
                try
                {
                    // 每隔1s处理
                    Thread.sleep(1000);
                    // 如果存在,开始应用程序处理。
                    if (file2.exists())
                    {
                        // 模拟应用程序处理数据。
                        Thread.sleep(1000);
                        // renameTo用来停止应用程序处理。与exist天生一对。
                        file2.renameTo(file);
                        System.out.println("应用程序处理完数据。");
                    }
    
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
     
  • 相关阅读:
    占满屏幕的宽高,当把textarea换成其他标签的时候,怎么才能编辑?
    鼠标点击文本框后,里面的文字就消失或全选中
    jquery中选取兄弟节点的方法
    文本出现省略号
    滚动条的样式
    省略号的样式。
    input的placeholder在ie9下不兼容的结局办法。
    [CF1097D] Makoto and a Blackboard
    [CF552C] Vanya and Scales
    [CF1353E] K-periodic Garland
  • 原文地址:https://www.cnblogs.com/highriver/p/2440771.html
Copyright © 2020-2023  润新知