在读写文件时,Java可以分别以字节和字符为单位对文件进行操作。
在java读写文件的方法中,分别可以字节读写,字符读写,按照行读,Files工具类中有readAllLines方法。
本文代码为了简介考虑,没有书写相关的异常处理,具体的异常处理代码查看此文:
文件异常处理
字节读写
// 字节读
InputStream inputStream = new FileInputStream("D:\\test\\test01.txt");
StringBuilder stringBuilder = new StringBuilder();
// read():以int形式返回读取的字节,只有一个字节,范围为(0-255)
// 若读到文件结尾,返回-1
int data = inputStream.read();
while (data != -1) {
char dataChar = (char) data;
stringBuilder = stringBuilder.append(dataChar);
data = inputStream.read();
}
inputStream.close();
System.out.println(stringBuilder.toString());
// 运行结果:
// test
// 字节写
OutputStream outputStream = new FileOutputStream("D:\\test\\test02.txt");
outputStream.write("HelloWorld".getBytes());
outputStream.close();
字符读写
当读取的文件或是写入的字符中含有中文,需要保证读取或是写入的
文件的编码格式要与程序保持一致
,否则会有乱码。此处我都设置为UTF-8。txt文件的编码格式可以通过:“文件”->“另存为”->“编码”设置。Java程序的编码格式通过-Dfile.encoding=UTF-8设置。
// 字符读写
Reader reader = new FileReader("D:\\test\\test.txt");
StringBuilder stringBuilder = new StringBuilder();
// read():以int形式返回读取的字节,可能是一个或者两个字节,范围为(0-65535)
// 若读到文件结尾,返回-1
int data = reader.read();
while (data != -1) {
char ch = (char) data;
stringBuilder = stringBuilder.append(ch);
data = reader.read();
}
reader.close();
System.out.println(stringBuilder);
// 运行结果:
// test测试文本
// 字符写
Writer writer = new FileWriter("D:\\test\\test2.txt");
writer.write("HelloWorld你好世界");
writer.close();
按行读写
// 按行读
Reader reader = new FileReader("D:\\test\\test.txt");
// 想要按行读文件,需要使用BufferedReader
BufferedReader bufferedReader = new BufferedReader(reader);
// readLine():按行读
String data = bufferedReader.readLine();
while (data != null) {
System.out.println(data);
data = bufferedReader.readLine();
}
bufferedReader.close();
// 运行结果:
// test测试文本
// 第二行
// 第三行abc
// 按行写
Writer writer = new FileWriter("D:\\test\\test3.txt");
BufferedWriter bufferedWriter = new BufferedWriter(writer);
bufferedWriter.write("HelloWorld你好世界");
// 写入行分隔符,与当前系统相关,不一定是('\n')
bufferedWriter.newLine();
bufferedWriter.write("第二行");
bufferedWriter.newLine();
bufferedWriter.write("第三行abc");
bufferedWriter.close();
Files工具类读写
Files类中有读取文件中全部数据的方法,readAllLines().
// 读取文件中全部内容
List<String> stringList = Files.readAllLines(Paths.get("D:\\test\\test.txt"));
for (String s : stringList) {
System.out.println(s);
}
// 运行结果:
// test测试文本
// 第二行
// 第三行abc
查看readAllLines()源码:
public static List<String> readAllLines(Path path) throws IOException {
// 默认使用UTF-8的编码规则,也可以使用readAllLines的重载方法,指定编码规则
return readAllLines(path, StandardCharsets.UTF_8);
}
// 也是一行行读取文件
public static List<String> readAllLines(Path path, Charset cs) throws IOException {
try (BufferedReader reader = newBufferedReader(path, cs)) {
List<String> result = new ArrayList<>();
for (;;) {
String line = reader.readLine();
if (line == null)
break;
result.add(line);
}
return result;
}
}
Files类写文件
Path path = Paths.get("D:\\test\\test4.txt");
Files.write(path, "test测试文本\n".getBytes());
Files.write(path, "第二行\n".getBytes(), StandardOpenOption.APPEND);
Files.write(path, "第三行abc".getBytes(), StandardOpenOption.APPEND);
Files工具类中还有很多复制、移动、创建文件的方法,有兴趣的查看源码学习即可。
版权声明:本文为weixin_46927507原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。