简单易懂讲文件

注意事项

如果运行代码的时候找不到文件,但是文件的的确确又存在,检查下 idea 的工作路径

img

路径

Path

Path 对象是将一个路径封装成一个对象,然后通过这个对象来执行路径的一些操作,所有的方法如下。具体的方法功能通过名称也能猜得八九不离十,不了解的查 API 文档。所有下面的方法都可以通过 idea 进入对应的类点击 alt + 7 查看

img

Paths

获取 Path 对象的工具类,一共两个重载方法

  • Path get(String first, String... more) 允许接收一个或者多个字符串,从而构造出一个 Path 对象
  • Path get(URI uri) 允许接收一个 uri 对象,从而构造出一个 Path 对象
import java.nio.file.Path;
import java.nio.file.Paths;

class PathDemo {
    public static void demo() {
        // 重载方法一,允许接受一个或者多个参数
        Path path1 = Paths.get("Main.java");
        System.out.println(path1.toAbsolutePath());
        Path path2 = Paths.get("E","1.base","workspace","slime");
        System.out.println(path2.toAbsolutePath());
        // 重载方法二,允许接受一个 URI 对象
        Path urlPath = Paths.get(path1.toUri());
        System.out.println(urlPath.toAbsolutePath());
    }
}

public class Main {
    public static void main(String[] args) {
        PathDemo.demo();
    }
}

输出:

E:\1.base\workspace\slime\file_io\src\main\java\cyrus\file_io\file\Main.java
E:\1.base\workspace\slime\file_io\src\main\java\cyrus\file_io\file\E\1.base\workspace\slime
E:\1.base\workspace\slime\file_io\src\main\java\cyrus\file_io\file\Main.java

文件

File

文件是将文件构造成一个 File 对象,然后通过操作这个对象来对文件进行读取,新增,更新,删除等操作。具体 API 如下,根据名字也能猜个七八分,具体 API 用法可以查看 API 文档。

imgimg

Files 对象

Files 对象可以操作对象路径下的文件,也可以操作这个路径,这里的路径是被包装成 Path 对象的。

imgimg

img

文件查找

通过 FileSystems 类来进行文件查找,例子如下:

在 matcher 中,glob 表达式开头的 **/ 表示“当前目录及所有子目录”,这在当你不仅仅要匹配当前目录下特定结尾的 Path 时非常有用。单 * 表示“任何东西”,然后是一个点,然后大括号表示一系列的可能性---我们正在寻找以 .tmp 或 .txt 结尾的东西。您可以在 getPathMatcher() 文档中找到更多详细信息。

class Find {
    public static void demo() {
        Path test = Paths.get("test");
        PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**/*.{temp,txt}");
        try {
            Files.walk(test).filter(matcher::matches).forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Find.demo();
    }
}

输出:

test\123.temp
test\dsaioh.txt
test\test\345.temp
test\test\qwe.txt

文件读写

读取

使用 Files 工具类进行操作,以下例子使用 readAllLines(Path path) 方法将整个 Main.java 文件读取并且打印到控制行中。

public class Main {
    public static void main(String[] args) throws IOException {
        List<String> list = Files.readAllLines(Paths.get("Main.java"));
        list.stream().forEach(System.out::println);
    }
}

输出:

package cyrus.file_io.file;

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


public class Main {
    public static void main(String[] args) throws IOException {
        List<String> list = Files.readAllLines(Paths.get("Main.java"));
        list.stream().forEach(System.out::println);
    }
}

写入

这里先创建个文件 1.txt 然后通过 Path write() 方法写入文档,该方法需要一个路径 Path 以及写入的 byte 数组

public class Main {
    public static void main(String[] args) throws IOException {

        File file = new File("test" + File.separator + "test" + File.separator + "1.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        String str = "input something";
        Files.write(file.toPath(), str.getBytes());
    }
}

输出:

img

文件太大怎么办

读取

通过 Files.lines() 将文件一行一行读取,每一行都是一个 Stream 流。

public class Main {
    public static void main(String[] args) throws IOException {
        Stream<String> lines = Files.lines(Paths.get("Main.java"));
        lines.forEach(System.out::println);
    }
}

输出:

package cyrus.file_io.file;

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


public class Main {
    public static void main(String[] args) throws IOException {
        Stream<String> lines = Files.lines(Paths.get("Main.java"));
        lines.forEach(System.out::println);
    }
}

写入

也是先通过Files.lines() 将文件一行一行读取,然后一行行写入

public class Main {
    public static void main(String[] args) throws IOException {
        String name = "test" + File.separator + "test" + File.separator + "Main.txt";
        PrintWriter printWriter = new PrintWriter(name);
        Files.lines(Paths.get("Main.java")).forEach(printWriter::println);
        printWriter.close();
    }
}

输出:

img

文章为本人学习过程中的一些个人见解,漏洞是必不可少的,希望各位大佬多多指教,帮忙修复修复漏洞!!!

进入本人语雀文档体验更好哦
https://www.yuque.com/docs/share/e91bfe3d-1d76-4ef2-99a5-543d79e20c38?# 《文件》
参考资料:java 编程思想

你可能还想阅读以下文章:
简单易懂讲IO

posted @ 2021-10-31 08:02  三木同学  阅读(190)  评论(0编辑  收藏  举报