- 1 基本方法
- 1.1 read() 方法
- 1.2 write() 方法
- 2 FileWriter FileOutputStream
牢记一点:IO 读取流一定要和文件相关联
操作 File文件,有4个常用方法 FileWriter FlieReader FileInputStream FileOutputStream
,当然了,更常用的是结合 缓冲区 来使用。
在介绍这 4个方法之前,先介绍几个基本方法
1 基本方法
1.1 read() 方法
int read(CharBuffer cb) throws IOException
参数:cb - 将要读入字符的缓冲区
返回:添加到缓冲区的 char 值的数量,如果此字符源位于缓冲区末端,则返回 -1
1.2 write() 方法
write(byte[] b, int off, int len)
:
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流 write(byte[] b)
将 b.length 个字节从指定 byte 数组写入此文件输出流中 write(int b)
将指定字节写入此文件输出流
2 FileWriter FileOutputStream
IO流的所有方法,使用都是一样的。都是,先 创建一个对象(new),然后调用该对象的方法,去完成相应的功能
FileWriter 代码
/*
如果文件不存在,会自动创建
如果文件存在,会被覆盖
如果在构造函数中加入 true,可以实现对文件进行续写
*/
FileWriter fw = new FileWriter(new File("E:" + File.separator + "test.txt"),true);
fw.wriet("haha");
fw.write("xixi");
/*
进行刷新,将数据直接写到目的地中
flush()可以刷新多次
*/
fw.flush();
fw.write("123");
/*
关闭流,关闭资源。在关闭前会先调用flush刷新缓冲中的数据到目的地
close()方法,会在关闭前,自动调用 flush()方法
*/
fw.close();
FileOutputStream 代码
File f = new File("E:"+ File.separator+"test.txt");
OutputStream out=new FileOutputStream(f);//如果文件不存在会自动创建
String str="Hello World";
byte[] b=str.getBytes();
out.write(b);//因为是字节流,所以要转化成字节数组进行输出
out.close();
也可以一个字节一个字节进行输出,如下:
byte[] b=str.getBytes();
for(int i=0;i<b.length;i++){
out.write(b[i]);
}
out.close();
FileReader 代码
File f = new File("E:" + File.separator + "test.txt");
Reader input = new FileReader(f);
char[] c = new char[1024];
// 以字符数组的形式取出数据
int len = input.read(c);
input.close();
System.out.println( new String(c,0,len));
// 用 循环方式 判断 是否读到底 --- 方式1
int len = 0;
while((len=input.read(c)) != -1){
System.out.println( new String(c,0,len));
}
// 用 循环方式 判断 是否读到底 --- 方式2 --- 不常用,以后就不写了
int temp = 0;
int len = 0;
while( (temp=input.read()) !=-1){
c[len] = (char) temp;
len++;
}
input.close();
System.out.println( new String(c,0,len));
FileInputStream 代码
File f = new File("E:"+File.separator + "test.txt");
// 读取流一定要和文件 相关联
InputStream in = new FileInputStream(f);
// 方法1 定义一个固定大小缓冲区
byte[] b=new byte[1024];
int len=in.read(b);
in.close();
System.out.println(new String(b,0,len));
但以上方法是有问题的,用不用开辟这么大的一个字节数组,明显是浪费嘛,
我们可以根据文件的大小来定义字节数组的大小,File类中的方法:public long length()
// 方法2 根据文件的大小来定义字节数组的大小
byte[] b=new byte[(int) f.length()];
in.read(b);
in.close();
System.out.println(new String(b));
// 方法3:一个字节一个字节读入
byte[] b=new byte[(int) f.length()];
for(int i=0;i<b.length;i++){
b[i]=(byte) in.read();
}
in.close();
System.out.println(new String(b));
但以上情况只适合知道输入文件的大小,不知道的话用如下方法:
byte[] b=new byte[1024];
int len = 0;
while ((len = in.read(b)) != -1 ){
System.out.println(new String(b,0,len));
}
in.close();