1.使用字符流类BufferedReader读文本文件
BufferedReader和InputStreamReader两个类都是Reader抽象类的子类,FileReader类是InputStreamReader类的子类,它们可以通过字符流的方式读取文件,并使用缓冲区,提高了读文本文件的效率。读取文本文件的具体步骤如下:
1)导入相关的类
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
2)构造一个BufferedReader对象
FileReader fr = new FileReader("mytest.txt");
BufferedReader br = new BufferedReader(fr);
或者
FileInputStream fis=new new FileInputStream("mytest.txt");
InputStreamReader isr=new InputStreamReader(fis, "UTF-8");//此构造方法可以设置指定的编码格式读取文件,防止出现乱码情况
BufferedReader br = new BufferedReader(isr);
3)利用BufferedReader类的方法读取文本文件中的数据
br.readLine();//读取一行数据,返回字符串
4)关闭相关的流对象
br.close();//后开的流先关
fr.close();//先开的流后关
代码举例说明:
//Bufferedreader类是Reader类的子类,效率比InputStreamReader类要高
public static void main(String[] args) {
InputStream is=null;
Reader reader=null;
BufferedReader br=null;
try {
//向上转型:InputStream类是抽象类,不能实例化,指向其子类FileInputStream类
is = new FileInputStream("E:/b.txt");
//向上转型:Reader类是抽象类,不能实例化,指向其子类InputStreamReader类,
//创建InputStreamReader类对象,此构造方法传递参数是InputStream类型
reader=new InputStreamReader(is, "UTF-8");
//创建BufferedReader类对象,此构造方法传递参数是Reader类型
br=new BufferedReader(reader);
String str;
while((str=br.readLine())!=null){//readLine()方法:一行一行的读取文件数据
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(br!=null){
br.close();
}
if(reader!=null){
reader.close();
}
if(is!=null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.使用字符流类BufferedWriter写文本文件
BufferedWriter和OutputStreamWriter两个类都是Reader抽象类的子类,FileWriter类是OutputStreamWriter类的子类,它们可以通过字符流的方式并通过缓冲区把数据写入文本文件,提高了写文本文件的效率。把数据写入文本文件的具体操作步骤如下:
1)导入相关的类
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
2)构造一个BufferedWriter对象
FileWriter fw = new FileWriter("mytest.txt");
BufferedWriter bw = new BufferedWriter(fw);
或者
FileOutputStream fos=new FileOutputStream("mytest.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");//此构造方法可以设置指定的编码格式写入文件,防止出现乱码情况
BufferedWriter bw = new BufferedWriter(osw);
3)利用BufferedWriter类的方法读取文本文件中的数据
bw.write("hello");//写入数据hello
bw.newLine();//换行
4)关闭相关的流对象
bw.flush();//刷新缓冲区
bw.close();//后开的流先关
fw.close();//先开的流后关
代码举例说明:
//BufferedWriter类是Writer类的子类,效率比OutputStreamWriter类高
public static void main(String[] args) throws IOException {
OutputStream os=new FileOutputStream("E:/d.txt",true);
Writer writer=new OutputStreamWriter(os, "UTF-8");
//FileWriter类是OutputStreamWriter类子类,OutputStreamWriter类是Writer类子类
//Writer writer=new FileWriter("E:/e.txt", true);
//创建BufferedWriter类对象
BufferedWriter bw=new BufferedWriter(writer);
bw.write("qwertyui");
bw.write("asdffg");
bw.newLine();//换行
bw.write("布欧");
System.out.println("文件写入完毕");
bw.close();
}
3.读写二进制文件
当我们需要对文件的图片、音频、视频等数据进行读写操作时,可以使用DataInputStream和DataOutputStream这两个常用的类。具体步骤如下:
1)导入相关的类
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
2)构造一个数据输入流对象和输出流对象
FileInputStream fis = new FileInputStream("HelloWorld.class");
DataInputStream dis = new DataInputStream(fis);
FileOutputStream fos = new FileOutputStream("AnHelloWorld.class");
DataOutputStream dos = new DataOutputStream(fos);
3)利用数据输入流类和输出流类的方法读写二进制文件中的数据
dis.read();//读取下一个数据
dis.readInt();//读取出来的是整数
dis.readByte();//读取出来的数据是Byte
dos.write(1); //把数据写入二进制文件
4)关闭数据输出流和输入流
//后开的流先关,先开的流后关
dos.close();
fos.close();
dis.close();
fis.close();
代码举例说明:复制一个图片
//DataInputStream类和DataOutputStream类常用于处理图片,音频,视频等二进制文件
public static void main(String[] args) throws IOException {
InputStream is=new FileInputStream("E:/java.jpeg");
DataInputStream dis=new DataInputStream(is);
OutputStream os=new FileOutputStream("E:/copyjava.jpeg");
DataOutputStream dos=new DataOutputStream(os);
int num;
while((num=dis.read())!=-1){
dos.write(num);
}
System.out.println("图片复制完毕");
dos.close();
os.close();
dis.close();
is.close();
}