原文:http://zetcode.com/java/file/

Java 文件教程展示了如何在 Java 中使用文件。 我们创建文件,找到文件的大小,复制文件,删除文件,重命名文件,从文件中读取,写入文件,并使用 Java Files获取文件所有者。

Files包含用于处理 Java 语言文件的静态方法。

Path是用于在文件系统中定位文件的对象。 路径形成层次结构,由目录和文件名元素序列组成,并由特殊的分隔符或定界符分隔。 可以使用Paths.get()File.toPath()方法创建Path

bugs.txt

  1. Assasin bug, Avondale spider, Backswimmer,
  2. Bamboo moth, Banana moth, Bed bug,
  3. Black cocroach, Blue moon, Bumble Bee,
  4. Carpenter Bee, Cattle tick, Cave Weta,
  5. Cicada, Cinnibar, Click beetle, Clothes moth,
  6. Codling moth, Centipede, Earwig, Eucalypt longhorn beetle,
  7. Field Grasshopper, Garden slug, Garden soldier,
  8. German cockroach, German wasp, Giant dragonfly,
  9. Giraffe weevil, Grass grub, Grass looper,
  10. Green planthopper, Green house spider, Gum emperor,
  11. Gum leaf skeletoniser, Hornet, Mealybug,
  12. Mites, Mole Cricket, Monarch butterfly,
  13. Mosquito, Silverfish, Wasp,
  14. Water boatman, Winged weta, Wolf spider,
  15. Yellow Jacket, Yellow Admiral

这是一个示例文本文件,可以在应用中使用。

Java 创建文件

以下示例使用Files.createFile()创建一个新文件。

com/zetcode/JavaCreateFile.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. import java.nio.file.attribute.FileAttribute;
  7. import java.nio.file.attribute.PosixFilePermission;
  8. import java.nio.file.attribute.PosixFilePermissions;
  9. import java.util.HashSet;
  10. import java.util.Set;
  11. public class JavaCreateFile {
  12. public static void main(String[] args) throws IOException {
  13. Set<PosixFilePermission> perms = new HashSet<>();
  14. perms.add(PosixFilePermission.OWNER_READ);
  15. perms.add(PosixFilePermission.OWNER_WRITE);
  16. perms.add(PosixFilePermission.GROUP_READ);
  17. perms.add(PosixFilePermission.GROUP_WRITE);
  18. perms.add(PosixFilePermission.OTHERS_READ);
  19. FileAttribute<Set<PosixFilePermission>> attrs = PosixFilePermissions.asFileAttribute(perms);
  20. Path myPath = Paths.get("src/resources/myfile.txt");
  21. if (Files.exists(myPath)) {
  22. System.out.println("File already exists");
  23. } else {
  24. Files.createFile(myPath, attrs);
  25. System.out.println("File created");
  26. }
  27. }
  28. }

我们使用PosixFilePermission设置新创建的文件的文件许可权。

  1. Set<PosixFilePermission> perms = new HashSet<>();
  2. perms.add(PosixFilePermission.OWNER_READ);
  3. perms.add(PosixFilePermission.OWNER_WRITE);
  4. perms.add(PosixFilePermission.GROUP_READ);
  5. perms.add(PosixFilePermission.GROUP_WRITE);
  6. perms.add(PosixFilePermission.OTHERS_READ);

在这里,我们选择文件的权限。

  1. Path myPath = Paths.get("src/resources/myfile.txt");

使用Paths.get(),我们获得文件的Path

  1. if (Files.exists(myPath)) {

在创建文件之前,请检查Files.exists()是否不存在。 如果我们尝试创建现有文件,则会抛出FileAlreadyExistsException

  1. Files.createFile(myPath, attrs);

使用Files.createFile()创建文件。 它以文件的Path和文件属性列表作为参数。

Java 文件大小

Files.size()确定文件的大小(以字节为单位)。

com/zetcode/JavaFileSize.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. public class JavaFileSize {
  7. public static void main(String[] args) throws IOException {
  8. Path myPath = Paths.get("src/resources/bugs.txt");
  9. long fileSize = Files.size(myPath);
  10. System.out.format("File size: %d bytes%n", fileSize);
  11. }
  12. }

该示例返回文本文件的大小。

Java 复制文件

Files.copy()复制文件。

com/zetcode/JavaCopyFile.java

  1. package com.zetcode;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.nio.file.Files;
  5. import java.nio.file.StandardCopyOption;
  6. public class JavaCopyFile {
  7. public static void main(String[] args) throws IOException {
  8. var source = new File("src/resources/bugs.txt");
  9. var dest = new File("src/resources/bugs2.txt");
  10. Files.copy(source.toPath(), dest.toPath(),
  11. StandardCopyOption.REPLACE_EXISTING);
  12. }
  13. }

在示例中,我们复制一个文件。

  1. Files.copy(source.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);

Files.copy()具有以下参数:源文件的路径,目标文件的路径以及复制选项。 如果目标文件已经存在,StandardCopyOption.REPLACE_EXISTING将导致目标文件被替换。

Java 删除文件

Files.deleteIfExists()删除文件(如果存在)。

com/zetcode/JavaDeleteFile.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. public class JavaDeleteFile {
  7. public static void main(String[] args) throws IOException {
  8. Path myPath = Paths.get("src/resources/myfile.txt");
  9. boolean fileDeleted = Files.deleteIfExists(myPath);
  10. if (fileDeleted) {
  11. System.out.println("File deleted");
  12. } else {
  13. System.out.println("File does not exist");
  14. }
  15. }
  16. }

该示例删除文件。

  1. boolean fileDeleted = Files.deleteIfExists(myPath);

Files.deleteIfExists()删除文件,如果删除了文件,则返回true;如果由于不存在而无法删除文件,则返回false

Java 移动文件

文件用Files.move()重命名。

com/zetcode/JavaMoveFile.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. public class JavaMoveFile {
  7. public static void main(String[] args) throws IOException {
  8. Path myPath = Paths.get("src/resources/myfile.txt");
  9. Path myPath2 = Paths.get("src/resources/myfile2.txt");
  10. Files.move(myPath, myPath2);
  11. System.out.println("File moved");
  12. }
  13. }

该示例重命名文件。

  1. Files.move(myPath, myPath2);

Files.move()具有两个参数:源文件路径和目标文件路径。

Java 读取文件

Files.readAllLines()从文件中读取所有行。 它可以确保在读取所有字节或引发异常后正确关闭文件。

Files.readAllLines()不适用于读取大文件。

com/zetcode/JavaReadFile.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.charset.StandardCharsets;
  4. import java.nio.file.Files;
  5. import java.nio.file.Path;
  6. import java.nio.file.Paths;
  7. import java.util.List;
  8. public class JavaReadFile {
  9. public static void main(String[] args) throws IOException {
  10. Path myPath = Paths.get("src/resources/bugs.txt");
  11. List<String> lines = Files.readAllLines(myPath, StandardCharsets.UTF_8);
  12. lines.forEach(line -> System.out.println(line));
  13. }
  14. }

该示例读取文本文件并将其内容写入控制台。

  1. List<String> lines = Files.readAllLines(myPath, StandardCharsets.UTF_8);

Files.readAllLines()采用文件路径和字符集作为参数。

  1. lines.forEach(line -> System.out.println(line));

使用forEach(),我们遍历列表并打印所有行。

Java 写入文件

Files.write()将文本行写入文件。 该方法可确保最后正确关闭文件。

com/zetcode/JavaWriteFile.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.charset.StandardCharsets;
  4. import java.nio.file.Files;
  5. import java.nio.file.Path;
  6. import java.nio.file.Paths;
  7. import java.nio.file.StandardOpenOption;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. public class JavaWriteFile {
  11. public static void main(String[] args) throws IOException {
  12. Path myPath = Paths.get("src/resources/myfile.txt");
  13. List<String> lines = new ArrayList<>();
  14. lines.add("blue sky");
  15. lines.add("sweet orange");
  16. lines.add("fast car");
  17. lines.add("old book");
  18. Files.write(myPath, lines, StandardCharsets.UTF_8,
  19. StandardOpenOption.CREATE);
  20. System.out.println("Data written");
  21. }
  22. }

在示例中,我们将四个文本行写入一个文件。

  1. Files.write(myPath, lines, StandardCharsets.UTF_8,
  2. StandardOpenOption.CREATE);

Files.write()将文件路径,字符集和文件打开选项作为参数。 如果文件StandardOpenOption.CREATE不存在,则将创建该文件。

Java 文件所有者

Files.getOwner()返回文件的所有者。

com/zetcode/JavaGetFileOwner.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. import java.nio.file.attribute.UserPrincipal;
  7. public class JavaGetFileOwner {
  8. public static void main(String[] args) throws IOException {
  9. Path myPath = Paths.get("src/resources/bugs.txt");
  10. UserPrincipal userPrincipal = Files.getOwner(myPath);
  11. String owner = userPrincipal.getName();
  12. System.out.println(owner);
  13. }
  14. }

在示例中,我们获得文件的所有者。

在本教程中,我们使用Files完成了一些基本的文件操作。 您可能也对相关教程感兴趣: Java 复制文件Java Files.list教程Java 创建目录Java 文件大小用 Java 创建文件用 Java 读取文本文件Apache FileUtils教程Java 教程

列出所有 Java 教程