在JAVA的IO包中操作文件内容的有两个类:字节流和字符流。在字节流中输入数据使用的是InputStream,输出数据使用的是OutputStream。在字符流中输出主要是使用Writer类来完成,输入主要是使用Reader类来完成。
注意上面的4个类是字节和字符的输入输出中的最大父类,当使用字节和字符具体操作对象的时候应该使用它们的子类(向上转型之后就是他们的父类);
一:字节流:
1.输出:
//1.使用File类找到一个文件
File f=new File("E:"+File.separator+"test.txt");
//准备好一个输出的对象,等会以它的子类来实例化该类的对象
OutputStream out=null;
out=new FileOutputStream(f,true); //操作文件使用这个子类,传入要操作的文件的对象,而且只能用byte数组来写入数据,第二个参数true表示在文件的末尾追加数据
String str="Hello World!";
byte[] b=str.getBytes();
out.write(b);
out.close();
注意IO的操作默认是覆盖之前的内容,如果想在文件已有的内容中做到文件内容的追加,应该在构造方法中将append的值设置为true。
如果想在文件的操作中添加换行的话,应该在添加的字符串中加上”\r\n”来完成。
2.读取:
File f=new File("E:"+File.separator+"test.txt");
InputStream input=null;
input=new FileInputStream(f);
//字节的输入流,准备字节数组来进行数据的读取,所有的内容都读到这个数组之中
byte[] b=new byte[1024];
int len=input.read(b);
input.close();
System.out.println("读入数据的长度:"+len);
System.out.println("读取到的结果是:"+new String(b,0,len));
常用的第二种模板代码格式:
File f=new File("E:"+File.separator+"test.txt");
InputStream input=null;
input=new FileInputStream(f);
byte[] b=new byte[1024];
int temp=0;
int len=0;
while((temp=input.read())!=-1){
b[len]=(byte)temp;
len++;
}
input.close();
System.out.println("读取到的结果是:"+new String(b,0,len));
二:字符流:
在程序中一个字符等于2个字节,JAVA提供了Reader,Writer两个类。
字符的输出流:Writer,
字符的输入流:Reader,
1.输出:
File f=new File("E:"+File.separator+"test.txt");
Writer out=null;
out=new FileWriter(f);
String str="这是字符的输出流,字符流操作的直接是字符不用转化!";
out.write(str);
out.close();
System.out.println("输出完毕!");
2.读入:
File f=new File("E:"+File.separator+"test.txt");
Reader reader=null;
reader=new FileReader(f);
//进行读的操作,必须首先声明一个数组,字节声明字节的数组,字符声明字符的数组
char c[]=new char[1024];
int temp=0;
int len=0;
while((temp=reader.read())!=-1){
c[len]=(char)temp;
len++;
}
reader.close();
System.out.println("读取到的结果是:"+new String(c,0,len));
三:注意:字节流是直接通过程序来操作文件没有缓冲区,然而字符流是存在缓冲区的,先经过缓冲区来操作文件对象。也就是说在使用Writer来写出数据的时候要是用flush方法来刷新缓冲区才能将数据写入到文件中。