以下讲解的类都继承于InputStream、OutputStream、Reader、Writer类,下面链接是这些类的常用方法:
https://blog.csdn.net/qq_31755183/article/details/103683945
1.FileInputStream类与FileOutputStream类(字节)
java提供了操作磁盘文件的(FileInputStream)类与(FileOutputStream)类,其中,读取文件内容使用的(FileInputStream)类,向文件写入内容使用的是(FileOutputStream)类。
FileInputStream类常用的构造方法如下:
- FileInputStream(String name):使用给定的文件名name创建一个FileInputStream对象;
- FileInputStream(File file):使用File对象创建FileInputStream对象,该方法允许把文件连接输入流之前对文件做进一步分析
FileOutputStream类常用的构造方法:
- FileOutputStream(File file):创建一个向指定File对象表示的文件中写入数据的文件输出流;
- FileOutputStream(File file,Boolean append):创建一个向指定File对象表示的文件中写入数据的文件输出流,如果第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处;
- FileInputStream(String name)与FileInputStream(String name,Boolean append)这两个构造方法与上面两个类似;
FileInputStream类与FileOutputStream类操作的数据单元是一个字节,如果文件中有中文字符(占两个字节),那么使用FileInputStream类与FileOutputStream类读、写文件的过程中会产生乱码,下面一个实例来解决这个乱码问题,代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
File file = new File("word.txt"); // 创建文件对象
try { // 捕捉异常
// 创建FileOutputStream对象,用来向文件中写入数据
FileOutputStream out = new FileOutputStream(file);
// 定义字符串,用来存储要写入文件的内容
String content = "窗前明月光,疑是地上霜";
// 创建byte型数组,将要写入文件的内容转换为字节数组
byte buy[] = content.getBytes();
out.write(buy); // 将数组中的信息写入到文件中
out.close(); // 将流关闭
} catch (IOException e) { // catch语句处理异常信息
e.printStackTrace(); // 输出异常信息
}
try {
// 创建FileInputStream对象,用来读取文件内容
FileInputStream in = new FileInputStream(file);
byte byt[] = new byte[1024]; // 创建byte数组,用来存储读取到的内容
int len = in.read(byt); // 从文件中读取信息,并存入字节数组中
//由于数组是1024字节的并没有全部占完,输出的时候会有很多空白,所以要去除空白内容
System.out.println("文件中的内容是:" + new String(byt).trim());// 将文件中的信息输出
in.close(); // 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回结果:
2.FileReader类与FileWriter类(字符)
FileReader类与FileWriter类对应了FileInputStream类与FileOutputStream类,其中,读取文件内容使用的是FileReader类,向文件中写入内容使用的是FileWriter类,FileReader类与FileWriter类操作的数据单元是一个字符,如果文件中有中文字符,那么使用FileReader类与FileWriter类读、写文件时会避免乱码问题。
FileReader类与FileWriter类的构造方法与FileInputStream类和FileOutputStream类类似,就不讲解了,下面来看一个实例,代码如下:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
File file = new File("test.txt");
try {
FileWriter fw = new FileWriter(file);
fw.write("举头望明月,低头思故乡");
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
FileReader fr = new FileReader(file);
char chr[] = new char[1024];
//已经读取的字符数
int count;
//循环读取文件内容,当不等于-1时,则继续读,如果等于-1时就证明文件内容已读完,停止读取
while((count = fr.read(chr)) != -1) {
System.out.println("文件内容是:" + new String(chr).trim());
}
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
返回结果: