目录
一、在Java中IO流分类
按数据类型分
字节流(字节输入流和字节输出流)
字符流(字符输入流和字符输出流)按流向分(站在Java程序的角度分,对Java语言来说,往文件里写内容,就相当于写出数据)
输入流(读入数据)
输出流(写出数据)
二、字节流FileOutputStream写出数据
package com.hezhiying;
import java.io.FileOutputStream;
public class Main {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("E:\\a.txt");//创建字节输出流对象
fos.write("hello".getBytes());//调用write()方法
fos.close();//释放资源
}
}
运行结果:
三、字节流FileInputStream读入数据
package com.hezhiying;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) throws Exception {
FileInputStream fis1 = new FileInputStream("E:\\a.txt");// 创建字节输入流对象
// 用单字节进行读取
int x = 0;
while ((x = fis1.read()) != -1) {
System.out.print((char) x);
}
fis1.close();// 释放资源
FileInputStream fis2 = new FileInputStream("E:\\a.txt");// 创建字节输入流对象
// 用字节数组进行读取
byte[] b = new byte[1024];
int len = 0;
while ((len = fis2.read(b)) != -1) {
System.out.print(new String(b, 0, len));
}
fis2.close();// 释放资源
}
}
运行结果:
其中第二种方法理论上是第一种的1024倍,当然了达不到
在Java中,还有一个高效字节流,这个方法比上面那个要快很多
四、字节缓冲输出流BufferedOutputStream
package com.hezhiying;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
public class Main {
public static void main(String[] args) throws Exception {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\a.txt"));
bos.write("hello".getBytes());// 调用write()方法
bos.close();// 释放资源s
}
}
运行结果:
五、字节缓冲输入流BufferedInputStream
package com.hezhiying;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) throws Exception {
BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream("E:\\a.txt"));
// 用单字节进行读取
int x = 0;
while ((x = bis1.read()) != -1) {
System.out.print((char) x);
}
bis1.close();// 释放资源
BufferedInputStream bis2 = new BufferedInputStream(new FileInputStream("E:\\a.txt"));
// 用字节数组进行读取
byte[] b = new byte[1024];
int len = 0;
while ((len = bis2.read(b)) != -1) {
System.out.print(new String(b, 0, len));
}
bis2.close();// 释放资源
}
}
运行结果:
六、字符流OutputStreamWriter写出数据:
字符流=字节流+编码表,ASCII,UTF-8,GBK等都是编码表,字符流跟字节流很相像,下面只讲解字符流特有的功能
代码:
package com.hezhiying;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws Exception {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"));
//这是写单个字符
osw.write('a');
//这是写一个字符数组
char[] chs1 = {'a','b','c'};
osw.write(chs1);
//这是写一个字符数组的一部分
char[] chs2 = {'a','b','c','d'};
osw.write(chs2,1,2);
//这是写一个字符串
osw.write("hello");
//这是写一个字符串的一部分
osw.write("hello",1,2);
osw.flush();
osw.close();
}
}
运行结果:
七、字符流InputStreamReader读入数据:
代码:
package com.hezhiying;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));
// 这是一次读取一个字符
int ch = 0;
while ((ch = isr.read()) != -1) {
System.out.println((char) ch);
}
InputStreamReader isr1 = new InputStreamReader(new FileInputStream("a.txt"));
// 这是一次读取一个字符数组
char[] chs = new char[1024];
int len = 0;
while ((len = isr1.read(chs)) != -1) {
System.out.print(new String(chs,0,len));
}
isr1.close();
isr.close();
}
}
运行结果:
七、字符缓冲输出流BufferedWriter:
代码:
package com.hezhiying;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
bw.write("hello");
bw.flush();
bw.close();
}
}
运行结果:
八、字符缓冲输入流BufferedReader:
代码:
package com.hezhiying;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
// 创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
// 这是一次读取一个字符
int ch = 0;
while ((ch = br.read()) != -1) {
System.out.println((char) ch);
}
BufferedReader br1 = new BufferedReader(new FileReader("a.txt"));
char[] chs = new char[1024];
int len=0;
while((len=br1.read(chs))!=-1) {
System.out.println(new String(chs,0,len));
}
br1.close();
br.close();
}
}
运行结果: