Java8:一行代码读写文件

方便

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

java
image-2269

较”复杂”版本


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));
}
}
}

更加”偷懒”的版本


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));
}
}

较为”舒适”的版本

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


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 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来减少垃圾评论。了解我们如何处理您的评论数据