`
AsWater
  • 浏览: 24764 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java SE 7 新特性之文件操作(4)- 删除、拷贝和移动文件

阅读更多

<!-- @page { size: 8.27in 11.69in; margin: 0.79in } P { margin-top: 0in; margin-bottom: 0.08in } -->

转自开发者的天空

 

删除操作

通过 Path类,我们可以删除文件、目录或符号链接。要注意的是当我们删除符号链接时,其指向的目的目录或文件不会被删除。当要删除一个目录时,该目录必须为空,否则会失败。

Path类提供了两个删除方法。第一个是 delete方法。 Delete方法会直接删除文件或目录,如果删除失败则会抛出异常。例如如果要删除的文件不存在,则会抛出 NoSuchFileException。程序员可以 catch这些异常并进行相应的处理。

 

 try {
path.delete();
} catch (NoSuchFileException x) {
System.err.format("%s: no such file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", path);
} catch (IOException x) {
//File permission problems are caught here.
System.err.println(x);
}


 

另外一个方法是 deleteIfExists。这个方法同样会删除文件或目录,和 delete方法唯一不同的是如果文件不存在,这个方法不会抛出异常。

 

拷贝操作

Path类提供了拷贝文件或目录的方法,就是 copyTo方法。(以前要 copy文件只能够自己写程序完成哦!)。在进行拷贝的时候,我们可以指定如果目标文件或目录已经存在时怎么处理;如果设置了 REPLACE_EXISTING,则会覆盖已有的文件或目录;如果没有设置 REPLACE_EXISTING,那么拷贝操作会失败。

要注意的是拷贝目录时,目录中的内容并没有被拷贝过去,新生成的目录会是一个空目录。要想将目录中的内容一起拷贝过去,只有自己编程了。

在拷贝符号链接时,默认的行为是拷贝符号链接指向的目的文件或目录。如果需要拷贝符号链接本身,需要指定 NOFOLLOW_LINKS REPLACE_EXISTING选项。

CopyTo方法接受 CopyOption类型的 varargs CopyOption是一个接口,目前有两个实现类: StandardCopyOption LinkOption CopyTo方法能够支持的选项有:

* REPLACE_EXISTING – 当要拷贝的是文件是,如果目标文件已经存在,则覆盖目标文件。如果要拷贝的是目录,当目标目录已经存在时,如果目标目录为空,覆盖目标目录;如果目标目录不为空,抛出 FileAlreadyExistsException。如果要拷贝的是符号链接,那么拷贝符号链接本身。

* COPY_ATTRIBUTES – 连文件或目录的属性一起拷贝。不同的文件系统和平台支持不同的文件属性,但是所有的文件系统和平台都支持最后修改时间这个属性。

* NOFOLLOW_LINKS – 如果要拷贝的是符号链接,直接拷贝符号链接本身。

下面是使用 copyTo的代码例子:

import static java.nio.file.StandardCopyOption.*;
...
try {
path.copyTo(newPath, REPLACE_EXISTING, COPY_ATTRIBUTES);
} catch (IOException x) {
//Logic for error condition...
System.err.println(x);
return;
}
 

 

 

移动操作

Path还提供了 moveTo方法来移动文件或目录。如果没有设置 REPLACE_EXISTING选项,那么当目标文件或目录存在时,操作会失败。

空目录能够被移动,但是如果目录不为空,是否能够移动目录要取决于是否能够不移动目录的内容。例如在 Windows系统下,如果是同一个硬盘分区内的移动,就可以成功,但是如果是不同硬盘分区之间的移动,就会失败,会抛出 FileSystemException异常。同时要注意的是,目的目录的父目录一定要存在,否则会抛出 NoSuchFileException。例如将 c:\temp\test移动到 c:\save\test,如果 c:\save目录不存在,则会抛出异常。

MoveTo方法也接受可变数量的参数,其支持的选项有:

REPLACE_EXISTING – 覆盖已经存在的文件或目录。如果目标文件 /目录是一个符号链接,那么该链接会被覆盖,但是起指向的文件或目录不会受到影响。 * ATOMIC_MOVE – 移动操作是一个原子操作。如果文件系统不支持移动的原子操作,会抛出异常。原子操作能够保证当你移动一个文件到一个目录中时,监视该目录的进程得到的是一个完整的文件。

下面是使用 moveTo方法的例子

 import static java.nio.file.StandardCopyOption.*;
...
try {
path.moveTo(newPath, REPLACE_EXISTING);
} catch (IOException x) {
// Logic for error condition...
System.err.println(x);
return;
}


 
分享到:
评论

相关推荐

    Java SE程序 文件的拷贝InputStream类

    Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝InputStream类Java SE程序 文件的拷贝...

    python爬虫-10-拷贝、移动文件和目录.ev4.rar

    `os`模块提供了许多与操作系统交互的功能,包括创建、删除、重命名文件或目录,而`shutil`模块则提供了更高级的文件操作,如复制和移动文件及目录。 2. **os模块** - `os.path`: 这个子模块包含了各种路径操作函数...

    C++ 文件操作类(拷贝、删除、移动、改名)

    在C++编程中,文件操作是一项基础且重要的任务,它涉及到读取、写入、创建、删除、移动和重命名文件。本节我们将详细探讨如何使用C++的标准库中的文件操作类来执行这些操作。 首先,C++标准库提供了一个名为`...

    用java实现文件拷贝

    Java实现文件拷贝的小程序 本资源是一个使用Java语言实现文件拷贝的小程序,具有很实用的功能。下面是对这个小程序的详细解释和...这个小程序使用了Java语言来实现文件拷贝,涉及到Java IO流和文件操作的相关知识点。

    Android 手机sdcard目录或文件的拷贝 移动 删除 递归

    一个关于文件操作的静态工具类 实现手机SD卡目录或文件的拷贝 移动 删除 递归 Demo中有详细注释 在进行Demo测试时 建议先把测试的文件备份一下在测试 否则删除就找不回了 具体可见我博客...实现手机SD卡目录或文件的...

    VisualC 实效编程 75 拷贝、删除和移动文件

    VisualC 实效编程 75 拷贝、删除和移动文件VisualC 实效编程 75 拷贝、删除和移动文件VisualC 实效编程 75 拷贝、删除和移动文件VisualC 实效编程 75 拷贝、删除和移动文件VisualC 实效编程 75 拷贝、删除和移动文件...

    Linux 基础 34-拷贝和移动命令-06-mv命令移动文件或者目录.flv

    Linux 基础 34-拷贝和移动命令-06-mv命令移动文件或者目录.flv

    Java无敌 基于网络的文件拷贝

    在Java编程中,实现基于网络的文件拷贝是一项常见的任务,尤其在分布式系统或云存储应用中。这个项目的关键在于高效、稳定地传输大量数据。根据提供的标题和描述,我们来详细探讨一下如何使用Java来实现这样的功能。...

    拷贝文件by列表 - 选择性拷贝文件神器

    "拷贝文件by列表 - 选择性拷贝文件神器"是一个工具,它专为需要根据预定义文件列表进行精确拷贝操作的用户设计。这个工具可以帮助用户避免手动选择大量文件的繁琐过程,提高工作效率,尤其适用于需要定期备份特定...

    java 文件拷贝

    在Java中,文件拷贝是常见的数据操作之一,涉及到数据的读取和写入。文件拷贝可以通过标准的IO流来实现,其中主要有两种不同的拷贝方案。 第一种方案是将文件内容一次性读取到内存中,然后再一次性写入到目标文件。...

    TeraCopy - 快速拷贝文件工具

    TeraCopy 是一款专为提升文件拷贝速度和效率而设计的工具,尤其适用于处理大量数据的转移。它优化了文件复制过程,减少了在传输大文件或大量文件时可能出现的错误和等待时间。这款工具出自CodeProjects,提供了源码...

    MavenUtil 文件拷贝

    例如,`File`类用于文件和目录路径名的表示,`FileInputStream`和`FileOutputStream`用于读写文件,`Files`类提供了一套静态方法,简化了文件操作,包括复制、移动和删除等。 2. **流(Stream)**:在Java中,文件...

    JAVA 带进度条的文件拷贝程序

    3. **文件拷贝**:Java提供了File类和InputStream/OutputStream接口来处理文件操作。我们可以通过FileInputStream和FileOutputStream读写文件,配合BufferedInputStream和BufferedOutputStream提高效率。在拷贝过程...

    Java实现Linux的远程拷贝

    在IT行业中,Java是一种广泛应用的编程语言,它不仅在企业级应用中表现出色,也能够实现各种系统级别的功能,如远程文件操作。本篇将详细探讨如何使用Java来实现Linux系统的远程拷贝功能。 首先,要实现Linux的远程...

    Linux运维-操作系统 教程 从入门到精通101课-29-29文件系统命令-cp拷贝.mp4

    Linux运维-操作系统 教程 从入门到精通101课-29-29文件系统命令-cp拷贝.mp4

    java-7-openjdk-amd64

    安装包:java-7-openjdk-amd64.tar.gz 使用方法 1. 拷贝至服务器/个人电脑 2. 解包 mkdir /opt/jdk/ tar -zxvf java-7-openjdk-amd64.tar.gz -C /opt/jdk/ 3. 配置编译环境 JAVA_HOME=/opt/jdk/java-7-openjdk-amd...

    用java实现的文件和文件夹拷贝和转移

    用java实现的文件和文件夹拷贝和转移

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件

    为了高效地与HDFS交互,Java API 提供了一套丰富的工具和类库,使得开发者能够方便地进行文件的读写、上传、下载、遍历、查找、拷贝以及管理HDFS上的文件和目录。以下将详细讲解如何使用Java API 操作HDFS。 ### 一...

Global site tag (gtag.js) - Google Analytics