java中Files的常用方法

1. 创建文件和目录

1.1 创建文件

Files.createFile() 方法用于创建一个新文件。如果文件已经存在,会抛出 FileAlreadyExistsException

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateFileExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        try {
            Files.createFile(path);
            System.out.println("File created successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.2 创建目录

Files.createDirectory() 用于创建一个新目录。如果目录已存在,会抛出 FileAlreadyExistsException

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateDirectoryExample {
    public static void main(String[] args) {
        Path path = Paths.get("new_directory");
        try {
            Files.createDirectory(path);
            System.out.println("Directory created successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.3 创建多层目录

Files.createDirectories() 用于创建多层目录,如果父目录不存在,它会递归地创建这些目录。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateDirectoriesExample {
    public static void main(String[] args) {
        Path path = Paths.get("new_directory/sub_directory");
        try {
            Files.createDirectories(path);
            System.out.println("Directories created successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 读取文件

2.1 读取整个文件的内容为 byte[]

Files.readAllBytes() 方法用于读取整个文件内容,并将其作为字节数组返回。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class ReadAllBytesExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        try {
            byte[] bytes = Files.readAllBytes(path);
            System.out.println(new String(bytes));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.2 读取整个文件的内容为 List<String>

Files.readAllLines() 方法用于将整个文件内容读取为一个 List<String>,每一行作为列表中的一个元素。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class ReadAllLinesExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        try {
            List<String> lines = Files.readAllLines(path);
            lines.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.3 使用流读取文件

Files.lines() 方法用于将文件的每一行作为 Stream<String> 返回,这种方式非常适合处理大文件,因为它不会一次性将文件全部加载到内存中。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class FilesLinesExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        try (Stream<String> lines = Files.lines(path)) {
            lines.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 写入文件

3.1 将字节数组写入文件

Files.write() 方法可以将字节数组写入文件。如果文件不存在,它会创建文件。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class WriteBytesExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        String content = "Hello, Files.write!";
        try {
            Files.write(path, content.getBytes());
            System.out.println("File written successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.2 将 List<String> 写入文件

Files.write() 也可以将一个字符串列表写入文件,每个字符串作为文件中的一行。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

public class WriteLinesExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        List<String> lines = Arrays.asList("First line", "Second line", "Third line");
        try {
            Files.write(path, lines);
            System.out.println("File written successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 文件的复制、移动和删除

4.1 复制文件

Files.copy() 方法用于复制文件或目录。如果目标文件已存在,可以通过传入 StandardCopyOption.REPLACE_EXISTING 来覆盖它。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class CopyFileExample {
    public static void main(String[] args) {
        Path sourcePath = Paths.get("example.txt");
        Path destinationPath = Paths.get("copy_example.txt");
        try {
            Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("File copied successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4.2 移动或重命名文件

Files.move() 方法用于移动或重命名文件。如果目标文件已存在,同样可以通过 StandardCopyOption.REPLACE_EXISTING 选项来覆盖它。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class MoveFileExample {
    public static void main(String[] args) {
        Path sourcePath = Paths.get("example.txt");
        Path destinationPath = Paths.get("moved_example.txt");
        try {
            Files.move(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("File moved successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4.3 删除文件或目录

Files.delete() 方法用于删除文件或空目录。如果文件或目录不存在,会抛出 NoSuchFileException。使用 Files.deleteIfExists() 可以避免抛出异常,如果文件或目录不存在,它将返回 false

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DeleteFileExample {
    public static void main(String[] args) {
        Path path = Paths.get("moved_example.txt");
        try {
            Files.delete(path);
            System.out.println("File deleted successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 检查文件或目录的属性

5.1 检查文件或目录是否存在

Files.exists() 方法用于检查文件或目录是否存在。Files.notExists() 方法用于检查文件或目录是否不存在。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileExistsExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        if (Files.exists(path)) {
            System.out.println("File exists.");
        } else {
            System.out.println("File does not exist.");
        }
    }
}

5.2 检查是否是文件或目录

  • Files.isRegularFile() 检查路径是否是一个常规文件。
  • Files.isDirectory() 检查路径是否是一个目录。
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileTypeCheckExample {
    public static void main(String[] args) {
        Path filePath = Paths.get("example.txt");
        Path dirPath = Paths.get("new_directory");

        if (Files.isRegularFile(filePath)) {
            System.out.println("It's a regular file.");
        }

        if (Files.isDirectory(dirPath)) {
            System.out.println("It's a directory.");
        }
    }
}

6. 读取和设置文件属性

6.1 读取文件的基本属性

Files.readAttributes() 方法可以一次性读取文件的多个属性

,例如大小、创建时间、最后修改时间等。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;

public class ReadFileAttributesExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        try {
            BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
            System.out.println("Creation Time: " + attrs.creationTime());
            System.out.println("Last Modified Time: " + attrs.lastModifiedTime());
            System.out.println("Size: " + attrs.size() + " bytes");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6.2 修改文件的时间属性

Files.setLastModifiedTime() 方法用于设置文件的最后修改时间。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
import java.util.concurrent.TimeUnit;

public class SetFileTimeExample {
    public static void main(String[] args) {
        Path path = Paths.get("example.txt");
        try {
            FileTime fileTime = FileTime.from(1623840362, TimeUnit.SECONDS);
            Files.setLastModifiedTime(path, fileTime);
            System.out.println("Last modified time updated successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

7. 遍历目录

7.1 使用 Files.walk() 遍历目录

Files.walk() 方法返回一个包含目录树中文件和目录的流,适用于递归遍历目录结构。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class WalkDirectoryExample {
    public static void main(String[] args) {
        Path path = Paths.get("new_directory");
        try (Stream<Path> paths = Files.walk(path)) {
            paths.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

7.2 使用 Files.list() 列出目录内容

Files.list() 方法返回指定目录下的文件和目录的流,但不递归遍历子目录。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class ListDirectoryExample {
    public static void main(String[] args) {
        Path path = Paths.get("new_directory");
        try (Stream<Path> paths = Files.list(path)) {
            paths.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

8. 结束语

Files 类提供了丰富且强大的工具方法,使得文件和目录的操作变得更加直观和简洁。无论是创建、读取、写入、复制、删除文件,还是处理文件属性、遍历目录,Files 类都提供了方便易用的API。在现代Java开发中,掌握这些方法能够帮助开发者更加高效地处理I/O操作。

9. 总结

1. `Files.exists(Path)`:检查指定路径是否存在文件或目录。
  1. Files.createFile(Path):创建一个新文件。
  2. Files.createDirectory(Path):创建一个新目录。
  3. Files.copy(Path source, Path target):将一个文件或目录从源路径复制到目标路径。
  4. Files.move(Path source, Path target):移动一个文件或目录从源路径到目标路径。
  5. Files.delete(Path):删除指定路径的文件或目录。
  6. Files.readAllBytes(Path):读取指定路径的文件的所有字节。
  7. Files.readAllLines(Path):按行读取指定路径的文件。
  8. Files.write(Path, byte[]):将字节数组写入指定路径的文件。
  9. Files.write(Path, Iterable<CharSequence>):将字符串集合按行写入指定路径的文件。
  10. Files.size(Path):返回指定路径的文件的大小。
  11. Files.isDirectory(Path):检查指定路径是否为目录。
  12. Files.isRegularFile(Path):检查指定路径是否为常规文件。
  13. Files.isHidden(Path):检查指定路径是否为隐藏文件。
  14. Files.getLastModifiedTime(Path):获取指定路径文件的最后修改时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying_Fish_Xuan

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值