• 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();