常见IO流
字节流
- java.io.InputStream 是所有字节输入流的超类
- java.io.OutputStream 是所有字节输出流的超类
- 常见子类有:
-
- FileInputStream
- FileOutputStream
- ByteArrayInputStream
- ByteArrayOutputStream
- BufferedInputStream
- BufferedOutputStream
//根据提供的文件路径获取与基于该文件字节输入流
InputStream is =new FileInputStream("D:\\小电影\\N.txt");
//声明字节缓冲区
System.out.println(is.available());
byte[] buff = new byte[107];
//声明变量表示实际的读写字节数
int len=0;
while((len=is.read(buff))!=-1) {
String s= new String(buff,0,len);
System.out.println(s);
}
is.close();
//根据提供的文件所在路径获取基于该文件的字节输出流(若文件不存在则尝试创建)
OutputStream os=new FileOutputStream("D:\\小电影\\f.txt",true);
//装备需要输出的数据
String s="窗前明月光,疑似地上霜";
//将字符串装换为字节数组
byte[] b=s.getBytes();
//通过输出流写出数据到指定的输出源
os.write(b);
os.close();
字符流
- java.io.Reader
- java.io.Writer
- 其常见子类有
-
- FileReader
- FileWriter
- InputStreamReader
- InputStreamWriter
- BufferedReader
- BufferedWriter
Reader reader = null;
Writer writer = null;
try {
reader=new FileReader(oldFile);
writer=new FileWriter(newFile);
char[] c=new char[100];
int len = 0;
System.out.println("开始拷贝");
while((len=reader.read(c))!=-1) {
writer.write(c, 0, len);
}
System.out.println("拷贝完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(Objects.nonNull(writer)) {
writer.close();
}if(Objects.nonNull(reader)) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
处理流
-
节点流(节点流也是低级流,主要用于跟输入输入源直接对接,常见的节点流:)
-
FileInputStream
-
FileOutputStream
-
FileReader
-
FileWriter
-
ByteArrayInputStream
-
ByteArrayOutputStream
-
CharArrayReader
-
CharArrayWriter
-
处理流(处理流也称之包装流,用于将节点流或者其他流进行包装,以提高数据的传输效率或者转换流的类型,常见的处理流:)
-
InputStreamReader
-
OutputStreamWriter
-
BufferedInputStream
-
BufferedOutputStream
-
BufferedReader
-
BufferedWriter
//需要写入文件的内容
String msg = "长江长江,我是黄河,收到请回复!!";
//目标文件
File f = new File("d:/text2.txt");
//字节输出流
FileOutputStream fos= new FileOutputStream(f,true);
//将字节流包装成字符输出流
OutputStreamWriter osw=new OutputStreamWriter(fos);
//将字符输出流包装成缓冲的字符输出流
BufferedWriter bw=new BufferedWriter(osw);
bw.write(msg);
//使用字符流的时候要加flush 将缓冲区的数据强行写入目标输出源
bw.flush();
bw.close();