`
cucaracha
  • 浏览: 141487 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A8f3fa2f-18ce-3862-897a-5d2209197c90
Java NIO.2
浏览量:87945
7a076ba7-8ec8-3241-aa3c-67bb2f7856a2
Java EE 7 简明教...
浏览量:36727
社区版块
存档分类
最新评论

[NIO.2] 第三十七篇 编写一个文件移动应用

阅读更多
移动文件分为两个步骤,先拷贝文件,再删除源文件。

下面的代码将会把  C:\rafaelnadal 目录中的内容移动到 C:\ATP\players\rafaelnafal 目录中。在移动前,要确保 C:\ATP\players\rafaelnafal 目录已经存在。在这个例子中,目录的移动使用了 Files.copy() 和 Files.delete() 方法,文件的移动使用了 Files.move() 方法。

import java.io.IOException; 
import java.nio.file.FileVisitOption; 
import java.nio.file.FileVisitResult; 
import java.nio.file.FileVisitor; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.BasicFileAttributes; 
import java.nio.file.attribute.FileTime; 
import java.util.EnumSet; 
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; 
import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES; 
import static java.nio.file.StandardCopyOption.ATOMIC_MOVE; 
 
class MoveTree implements FileVisitor { 
 
   private final Path moveFrom; 
   private final Path moveTo; 
   static FileTime time = null; 
 
   public MoveTree(Path moveFrom, Path moveTo) { 
        this.moveFrom = moveFrom; 
        this.moveTo = moveTo; 
   } 
 
   static void moveSubTree(Path moveFrom, Path moveTo) throws IOException { 
        try { 
            Files.move(moveFrom, moveTo, REPLACE_EXISTING, ATOMIC_MOVE); 
        } catch (IOException e) { 
            System.err.println("Unable to move " + moveFrom + " [" + e + "]"); 
        } 
 
   } 
 
   @Override 
   public FileVisitResult postVisitDirectory(Object dir, IOException exc)  
                                                                     throws IOException { 
        Path newdir = moveTo.resolve(moveFrom.relativize((Path) dir)); 
        try { 
            Files.setLastModifiedTime(newdir, time); 
            Files.delete((Path) dir); 
        } catch (IOException e) { 
            System.err.println("Unable to copy all attributes to: " + newdir+" [" + e + "]"); 
        } 
 
        return FileVisitResult.CONTINUE; 
   } 
 
   @Override 
   public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs)  
                                                                        throws IOException { 
        System.out.println("Move directory: " + (Path) dir); 
        Path newdir = moveTo.resolve(moveFrom.relativize((Path) dir)); 
        try { 
            Files.copy((Path) dir, newdir, REPLACE_EXISTING, COPY_ATTRIBUTES); 
            time = Files.getLastModifiedTime((Path) dir); 
        } catch (IOException e) { 
            System.err.println("Unable to move " + newdir + " [" + e + "]"); 
            return FileVisitResult.SKIP_SUBTREE; 
        } 
        return FileVisitResult.CONTINUE; 
   } 
   @Override 
   public FileVisitResult visitFile(Object file, BasicFileAttributes attrs)  
                                                                        throws IOException { 
        System.out.println("Move file: " + (Path) file); 
        moveSubTree((Path) file, moveTo.resolve(moveFrom.relativize((Path) file))); 
        return FileVisitResult.CONTINUE; 
   } 
   @Override 
   public FileVisitResult visitFileFailed(Object file, IOException exc)  
                                                                        throws IOException { 
        return FileVisitResult.CONTINUE; 
   } 
} 
class Main { 
    public static void main(String[] args) throws IOException { 
        Path moveFrom = Paths.get("C:/rafaelnadal"); 
        Path moveTo = Paths.get("C:/ATP/players/rafaelnadal"); 
        MoveTree walk = new MoveTree(moveFrom, moveTo); 
        EnumSet opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS); 
        Files.walkFileTree(moveFrom, opts, Integer.MAX_VALUE, walk); 
    } 
}

当然,也可以不使用 Files.move() 方法,而使用 Files.copy()
和 Files.delete() 方法来移动文件:

static void moveSubTree(Path moveFrom, Path moveTo) throws IOException { 
        try { 
            Files.copy(moveFrom, moveTo, REPLACE_EXISTING, COPY_ATTRIBUTES); 
            Files.delete(moveFrom); 
        } catch (IOException e) { 
            System.err.println("Unable to move " + moveFrom + " [" + e + "]"); 
        } 
    }


文章来源:http://www.aptusource.org/2014/04/nio-2-writing-a-move-files-application/
0
0
分享到:
评论

相关推荐

    java精通+开发案例 经典经典总结

    Java编程语言自1995年发布以来,一直保持着旺盛的生命力,广泛应用于企业级应用、移动应用(尤其是Android平台)以及互联网后端服务。"java精通+开发案例 经典经典总结"这个主题涵盖了Java学习的核心内容和实战经验...

    JAVA自主学习

    **:编写第一个Java程序,了解基本的代码结构,包括类定义、主方法和输出语句。 3. **数据类型**:Java有两大类数据类型:基本类型(如int、char、boolean)和引用类型(如类、接口、数组)。 4. **变量**:理解变量...

    java从入门到精通文档.rar

    Java编程语言自1995年发布以来,一直保持着旺盛的生命力,被广泛应用于桌面应用、Web应用、移动应用、企业级应用以及大数据处理等多个领域。这份“Java从入门到精通文档”旨在帮助初学者逐步掌握Java编程的核心概念...

    java课程设计 入门 简单

    Java课程设计是初学者入门编程世界的绝佳途径,它涵盖了编程基础、面向对象编程以及实际项目应用等多个方面。在这个过程中,你将学习到如何使用Java语言解决问题,并逐步掌握编程思维。 一、Java语言基础 Java是一...

    java基础教程

    3. 继承:一个类可以继承另一个类的特性,实现代码复用和扩展。 4. 多态:同一消息可以被不同类型的对象响应,提供了灵活性。 五、集合框架 Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、...

    Java学习教程

    Java学习教程是一个全面而深入的资源,旨在帮助初学者和有经验的开发者系统地学习Java编程语言。这个教程共分为14个章节,涵盖了从基础语法到高级特性的方方面面,确保学习者能够逐步掌握Java的核心知识。 第一章:...

    java视频教程_黑马Java零基础辅导班[第一期]第1天课件源码

    Java,作为一门广泛应用于企业级应用开发、移动应用以及大数据处理的语言,具有跨平台、面向对象、稳定性和高效性等特性。本教程将围绕"Java视频教程_黑马Java零基础辅导班[第一期]第1天课件源码"的主题,对Java的...

    Java课程学习以及部分小程序资料

    Java作为一种广泛应用的高级编程语言,是许多开发者的首选工具,尤其对于初学者来说,它的语法简洁且具有丰富的类库,能够帮助快速构建各种应用程序。"Java课程学习以及部分小程序资料"这个压缩包显然是为了帮助学习...

    java资料专业的教程

    在IT领域,Java是一种广泛使用的编程语言,它的应用涵盖了从桌面应用、Web应用到移动应用和大型企业级系统。本教程旨在深入解析Java的核心概念和技术,帮助初学者和进阶者更好地理解和掌握这门强大的语言。 一、...

    java经典面试题

    - 单例模式:确保一个类只有一个实例。 - 工厂模式:提供创建对象的接口。 - 适配器模式:使不兼容的接口能够协同工作。 - 责任链模式:传递请求直到被处理。 - 观察者模式:对象之间的一对多依赖关系。 37. *...

    软件设计师专题12JAVA程序设计语言

    Java程序设计语言是软件设计师必备的核心技能之一,它以其跨平台、面向对象和高效能的...同时,Java的开源生态系统、丰富的第三方库以及持续更新的语言特性,使其在云计算、大数据、移动开发等多个领域都有广泛应用。

Global site tag (gtag.js) - Google Analytics