IO流概述
* 可以将这种数据传输操作,看做一种数据的流动 , 按照流动的方向分为输入Input和输出Output
* Java中的IO操作主要指的是 java.io包下的一些常用类的使用. 通过这些常用类对数据进行读取(输入Input) 和 写出(输出Output)
*
* IO流的分类:
* 按照流的方向来分,可以分为:输入流和输出流.
* 按照流动的数据类型来分,可以分为:字节流和字符流
*
* 字节流:
* - 输入流 : InputStream
* - 输出流 : OutputStream
* 字符流:
* - 输入流 : Reader
* - 输出流 : Writer
*
*
* 一切皆字节:
* 计算机中的任何数据(文本,图片,视频,音乐等等)都是以二进制的形式存储的.
* 在数据传输时 也都是以二进制的形式存储的.
* 后续学习的任何流 , 在传输时底层都是二进制.
OutputStream:
public static void main(String[] args) throws IOException {
//FileOutputStream
//FileOutputStream构造方法中如果传入true会接着写
FileOutputStream fos = new FileOutputStream("D://文件练习//2.txt");
byte[] bytes2 = "ABCDEF".getBytes();
fos.write(bytes2,2,2);
//fos.write(bytes2);
//fos.write(65);//写一个字符
fos.close(); //写在哪在哪关闭
System.out.println("已经写出");
}
InputStream:
public static void main(String[] args) throws IOException {
//中文情况
FileInputStream fis = new FileInputStream("D://文件练习//1.txt");
byte[] bytes = new byte[10];
int len = fis.read(bytes);
/**字节流读取文字容易读成半个字*/
System.out.println(new String(bytes,0,len));
len = fis.read(bytes);
System.out.println(new String(bytes,0,len));
len = fis.read(bytes);
System.out.println(new String(bytes,0,len));
fis.close();
//没有东西就是-1
}
Writer
public static void main(String[] args) throws IOException {
//writer
FileWriter fw = new FileWriter("D://文件练习//3.txt",true);
fw.write("天才少年");
fw.close();
}
Reader
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("D://文件练习//4.txt");
char[] chars = new char[100];
int len = fr.read(chars);
//fr.read(chars);
System.out.println(new String(chars,0,len));
System.out.println(new String(chars,0,len).length());
fr.close();
}
字节转字符
public static void main(String[] args) throws IOException {
//转换流 :将字节流转换成字符流 使用了装饰者模式
FileInputStream fis = new FileInputStream("D://文件练习//5.txt");
//将字节输入流转换为字符输入流 参数为要转换的字节流
//注意编码字符表是否相同
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
while (true){
int c = isr.read();
if(c==-1){
break;
}
System.out.println((char) c);
}
}