字符输入流
/*
* FileInputStream和FileOutputStream是字节流
* 字节流的祖宗类(基类)InputStream和OutputStream
*
* 字符流:相对于字节流每次需要操作字节数组而言,字符流就直接操作字符
* 字符流的祖宗类:Reader和Writer
* 计算机底层只有字节流
* Reader:
* 常用的子类:FileReader extends InputStreamReader extends Reader
*
* */
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class Demo01 {
public static void main(String[] args) {
FileReader fileReader = null;
try {
fileReader = new FileReader("C:\\Users\\GzhAnkh\\Desktop\\FileApiDemo03\\mkdij创建的目录\\FileApiDemo05.txt");
/*
* read(char[] c);返回值代表读取到的字符的实际个数,如果为-1就表示读完了
* */
char[] chars = new char[10];
int length;
while ((length = fileReader.read(chars)) != -1) {
System.out.println(Arrays.toString(chars));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(fileReader!=null)
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符输出流
/*
* 字符流只能操作 文本文件!!
* * */
public class Demo01 {
public static void main(String[] args) {
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
fileReader = new FileReader("C:\\Users\\GzhAnkh\\Desktop\\FileApiDemo03\\mkdij创建的目录\\FileApiDemo05.txt");
fileWriter = new FileWriter("C:\\Users\\GzhAnkh\\Desktop\\FileApiDemo03\\mkdij创建的目录\\FileApiDemo06.txt");
char[] chars = new char[10];
int length;
while ((length = fileReader.read(chars)) != -1) {
fileWriter.write(chars, 0, length);
/*
* fileWriter.write(chars,0,length);
* length的作用:
* 如果不写length,读入到数组其实是一次覆盖,数据不够多的时候,就会覆盖不完整,
* 然后在写入的时候就会把整个数组写进去,然后就会多写入没有覆盖完的数据
* */
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileWriter.flush();
/*
* 缓冲区(8kb)满了才会写入,没满就不会写入,想写入就要调用flush()方法,或者调用close方法
* */
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fileWriter!=null)
fileWriter.close();
if(fileReader!=null)
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}