Java8:一行代码读写文件

方便

其实在Java1.7中就已经新增了java.nio包,但是用的太少了,直到今晚遇到一个读取文件的问题.才想起来,就找到了例子,下面的代码部分来自网络.

java
image-2269

较”复杂”版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Created by puruidong on 2015/5/1.
 */


public class Entity {
    public static void main(String[] args) throws IOException {
         if (!Files.exists(Paths.get(".\\test.txt"))) Files.write(Paths.get(".\\test.txt"), new byte[0]);
        if (!Files.exists(Paths.get(".\\newtest.txt"))) Files.write(Paths.get(".\\newtest.txt"), new byte[0]);
        try (
                FileInputStream fis = new FileInputStream(".\\test.txt");
                FileOutputStream fos = new FileOutputStream(".\\newtest.txt");
        ) {
            if (Files.readAllLines(Paths.get(".\\test.txt")).size() == 0) {
                Files.write(Paths.get(".\\test.txt"), ("first write------" + System.currentTimeMillis()).getBytes());
            }else{
                //一行代码写入文件.
                Files.write(Paths.get(".\\test.txt"), ("more write------" + System.currentTimeMillis()).getBytes());
            }
            int result = 0;
            byte[] by = new byte[1024];
            while ((result = fis.read(by)) != -1) {
                fos.write((new String(by) + "---" + System.currentTimeMillis()).getBytes());
            }
            /*
             * java 8 一行代码读取文件内容
               *
               1)文件可能很大,可能会超出内存空间,使用前要做评估。
               2)要输出日志,记录为什么无法读取文件或者在阅读文件时遇到的任何错误。
               3)在把字节转换成字符时,应该指定字符编码。
               4)要处理文件不存在的情况。
               还要注意,如果读入的文件的编码是ANSI编码,那么上面的例子在读取文件内容时会报java.nio.charset.MalformedInputException: Input length = 1错误。
             *
             */
            Files.readAllLines(Paths.get(".\\newtest.txt"), Charset.defaultCharset()).forEach(t -> System.out.println("newtest.txt:" + t));
        }
    }
}

更加”偷懒”的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Created by puruidong on 2015/5/1.
 */


public class Entity {
    public static void main(String[] args) throws IOException {
        //检查文件是否存在
        if (!Files.exists(Paths.get(".\\test.txt"))) Files.write(Paths.get(".\\test.txt"), new byte[0]);
        if (!Files.exists(Paths.get(".\\newtest.txt"))) Files.write(Paths.get(".\\newtest.txt"), new byte[0]);
        //end.
        if (Files.readAllLines(Paths.get(".\\test.txt")).size() == 0) {
            Files.write(Paths.get(".\\test.txt"), ("first write------" + System.currentTimeMillis()).getBytes());
        } else {
            //一行代码写入文件.
            Files.write(Paths.get(".\\test.txt"), ("more write------" + System.currentTimeMillis()).getBytes());
        }
            Files.write(Paths.get(".\\newtest.txt"), (Files.readAllLines(Paths.get(".\\test.txt"))));
       
            /*
             * java 8 一行代码读取文件内容
               *
               1)文件可能很大,可能会超出内存空间,使用前要做评估。
               2)要输出日志,记录为什么无法读取文件或者在阅读文件时遇到的任何错误。
               3)在把字节转换成字符时,应该指定字符编码。
               4)要处理文件不存在的情况。
               还要注意,如果读入的文件的编码是ANSI编码,那么上面的例子在读取文件内容时会报java.nio.charset.MalformedInputException: Input length = 1错误。
             *
             */
        Files.readAllLines(Paths.get(".\\newtest.txt"), Charset.defaultCharset()).forEach(t -> System.out.println("newtest.txt:" + t));
    }
}

较为”舒适”的版本

下面这个是我自己觉得比较好的版本,虽然改进空间很大,但对于这个小程序来说,应该是足够了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Created by puruidong on 2015/5/1.
 */


public class Entity {
    public static void main(String[] args) throws IOException {
        //检查文件是否存在
        if (!Files.exists(Paths.get(".\\test.txt"))) write(".\\test.txt", new byte[0]);
        if (!Files.exists(Paths.get(".\\newtest.txt"))) write(".\\newtest.txt", new byte[0]);
        //end.
        if (Files.readAllLines(Paths.get(".\\test.txt")).size() == 0) {
            write(".\\test.txt", ("first write------" + System.currentTimeMillis()).getBytes());
        } else {
            //一行代码写入文件.
            write(".\\test.txt", ("more write------" + System.currentTimeMillis()).getBytes());
        }
        write(".\\newtest.txt", (Files.readAllLines(Paths.get(".\\test.txt"))));
        show(".\\newtest.txt");
    }

    //还有两个就懒得实现了,只是第二个参数不同

    /**
     * 一行代码写文件的封装.
     *
     * @param paths
     * @param content
     * @throws IOException
     */
    private static void write(String paths, Iterable<? extends CharSequence> content) throws IOException {
        Files.write(Paths.get(paths), content);
    }

    /**
     * 一行代码写文件的封装
     *
     * @param paths
     * @param content
     * @throws IOException
     */
    private static void write(String paths, byte[] content) throws IOException {
        Files.write(Paths.get(paths), content);
    }


    /**
     * 一行代码输出文件
     *
     * java 8 一行代码读取文件内容
     *
     1)文件可能很大,可能会超出内存空间,使用前要做评估。
     2)要输出日志,记录为什么无法读取文件或者在阅读文件时遇到的任何错误。
     3)在把字节转换成字符时,应该指定字符编码。
     4)要处理文件不存在的情况。
     还要注意,如果读入的文件的编码是ANSI编码,那么上面的例子在读取文件内容时会报java.nio.charset.MalformedInputException: Input length = 1错误。
     *
     * @param filepath
     * @throws IOException
     */
    private static void show(String filepath) throws IOException {
        Files.readAllLines(Paths.get(filepath), Charset.defaultCharset()).forEach(t -> System.out.println(filepath + "------>#" + t));
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据