i流是一种输入流,负责把数据读到内存中去,o流是一种输出流,负责把数据写出去。
io流按照穿书方向分为输入流和输出流。
io流按照数据的最小单位可以分为字节流和字符流。
字节流适合操作所有类型的文件,字符流一般适合操作文本文件。
io流总体来看有四大类
字节输入流(InputStream):FileputStream
public class Test2 {
public static void main(String[] args) throws Exception {
InputStream is = new FileInputStream("D:\\code\\file-io-app\\file-io-app\\src\\java01.txt");
//2.开始读取数组
byte[]bytes=new byte[3];
int len=is.read(bytes);
String rs=new String(bytes);
System.out.println(rs);
System.out.println("当前读取的字节" + len);
}
}
字节输出流(OutputStream):FileoutStream
public class Test4 {
public static void main(String[] args) throws IOException {
OutputStream as=new FileOutputStream("D:\\code\\file-io-app\\file-io-app\\src\\java04out.txt",true);
as.write(97);
as.write('b');
byte[]bytes="我爱你".getBytes();
as.write(bytes);
//换行符号
as.write("\r\n".getBytes());
as.close();
}
}
字符输入流(Reader):FileReader
public class Test1 {
public static void main(String[] args) {
File f1=new File("io-app\\src\\java01.txt");
int c= (int) f1.length();
try(
Reader fr=new FileReader("D:\\code\\io-app\\io-app\\src\\java01.txt");
) {
//读取文本内容
/* int a;
while ((a=fr.read())!=-1) System.out.print((char) a);*/
char[]buffer=new char[3];
int len;
while ((len=fr.read())!=-1){
System.out.print(new String(buffer, 0, len));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
字符输出流(Writer):FileWriter
public class Test2 {
public static void main(String[] args) {
try (
Writer rw=new FileWriter("D:\\code\\io-app\\io-app\\src\\javacopy01.txt");
){
//1.写一个字符串出去
rw.write("a");
rw.write("b");
rw.write("岳");
rw.write("\r\n");
//2.写一个字符串进去
rw.write("我爱你");
//3.写字符串中的一部分出去
rw.write("我爱你",0,2);
//4.写一个字符数组出去
char[]buffer={'a','b','b','岳','治'};
rw.write(buffer);
//5.写字符数组的一部分出去
rw.write(buffer,0,2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
字节缓冲输入流
public class Test1 {
public static void main(String[] args) {
try (
InputStream is=new FileInputStream("D:\\code\\io-app\\io-app\\src\\java01.txt");
InputStream bis=new BufferedInputStream(is);
OutputStream os=new FileOutputStream("D:\\code\\io-app\\io-app\\src\\java04.txt");
OutputStream bos=new BufferedOutputStream(os);
){
byte[]buffer=new byte[1024];
int len;
while ((len=bis.read(buffer))!=-1){
bos.write(buffer,0,len);
}
System.out.println("复制成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
需要对原始的字符方法进行包装
字符缓冲输入流
public class Test2 {
public static void main(String[] args) {
try(
Reader fr=new FileReader("D:\\code\\io-app\\io-app\\src\\java04.txt");
//创建字符缓冲输入流包装原始字符输入流
BufferedReader dr=new BufferedReader(fr);
){
/* char[]buffer=new char[3];
int len;
while ((len= dr.read(buffer))!=-1){
System.out.print(new String(buffer, 0, len));
}*/
System.out.println(dr.readLine());
System.out.println(dr.readLine());
System.out.println(dr.readLine());
System.out.println(dr.readLine());
}catch (Exception e){
e.printStackTrace();
}
}
}
上述代码按行输出没有内容会输出null
字符缓冲输出流
public class Test3 {
public static void main(String[] args) throws Exception {
try(
Writer rw=new FileWriter("D:\\code\\io-app\\io-app\\src\\java05.txt");
BufferedWriter bw=new BufferedWriter(rw);
) {
bw.write('a');
bw.write('b');
bw.write('c');
bw.write('d');
bw.newLine();
bw.write("我爱你中国");
bw.write("\n\r");
bw.write("我爱你中国");
bw.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}