IO流的目的:将数据写入文件中,实现文件的永久化存储,也可以读取出文件中的内容。
IO流可分为字节流和字符流。
字节流包含两个抽象类:
字节流:InputStream和OutputStream。InputStream表示输入流,是读取数据的基类,其常用子类有FileInputStream、ByteArrayInputStream等;OutputStream表示输出流,是写出数据的基类,其常用子类有FileOutputStream、ByteArrayOutputStream等。
字符流:包含两个抽象类:Reader和Writer。Reader表示输入流,是读取字符数据的基类,其常用子类有FileReader、CharArrayReader、StringReader等;Writer表示输出流,是写出字符数据的基类,其常用子类有FileWriter、CharArrayWriter、StringWriter等。
字节流常用方法
InputStream类常用方法:
int read(): 读取一个字节的数据,返回值为0-255,如果到达文件末尾,返回-1;
int read(byte[] b): 从输入流中读取b.length个字节的数据,并将其存储在数组b中;
void close(): 关闭输入流。
OutputStream类常用方法:
void write(int b): 写出一个字节的数据;
void write(byte[] b): 将数组b中的数据全部写出;
void flush(): 刷新输出流,将缓冲区中的数据写出;
void close(): 关闭输出流
字符流常用方法
Reader类常用方法:
int read(): 读取一个字符的数据,返回值为0-65535,如果到达文件末尾,返回-1;
int read(char[] cbuf): 从输入流中读取cbuf.length个字符的数据,并将其存储在数组cbuf中;
void close(): 关闭输入流。在这里插入代码片
Writer类常用方法:
void write(int c): 写出一个字符的数据;
void write(char[] cbuf): 将数组cbuf中的数据全部写出;
void flush(): 刷新输出流,将缓冲区中的数据写出;
void close(): 关闭输出流。
![](https://i-blog.csdnimg.cn/blog_migrate/6236c503345266b1f252088fc5c9b7f5.png)
部分代码示例
public static void main(String[] args) throws IOException {
File file = new File("E:/idea/test.txt"); //目标文件不存在会自动创建
FileWriter fileWriter = new FileWriter(file,true); //new FileWriter(file,true);true表示文件内容追加,不写或false表示对文件内容覆盖
String str = "给我看看oooooooo!!!!!";
/* 一个一个字节写
for(int i = 0;i < str.length();i++){
fileWriter.write(str.charAt(i));
}
*/
//以数组多个写入
char[] chars = str.toCharArray();
fileWriter.write(chars);
fileWriter.close();
}
public static void main(String[] args) throws IOException {
File file = new File("E:/idea/test.txt");
FileReader fileReader = new FileReader(file);
//一次读一个字符
/*
int i ;
while ((i = fileReader.read()) != -1){
System.out.print((char)i);
}
*/
//多字符读取
char[] ch = new char[4];
int len = fileReader.read(ch);
while (len != -1) {
for (int i = 0; i < len; i++) {
System.out.print(ch[i]);
}
len = fileReader.read(ch);
/*String s = new String(ch, 0, len);
System.out.print(s);
len = fileReader.read(ch);*/
}
fileReader.close();
}
public static void main(String[] args) throws IOException {
File file = new File("E:/idea/zzz.png");
File file1 = new File("E:/idea/ccc.png");
FileInputStream fileInputStream = new FileInputStream(file);
FileOutputStream fileOutputStream = new FileOutputStream(file1);
/*
int len = fileInputStream.read();
while (len != -1){
fileOutputStream.write(len);
len = fileInputStream.read();
}
*/
byte[] b = new byte[1024*3];
int len = fileInputStream.read(b);
while(len != -1){
fileOutputStream.write(b,0,len);
len = fileInputStream.read(b);
}
fileOutputStream.close();
fileInputStream.close();
}