IO 流按照数据流向分可以分为输入流和输出流;按照处理的数据类型来分可以分为字符流和字节流。字节流通常用来操作二进制文件,一些数字和字母都是占一个字节,可以使用字节流来操作,但是汉字占两个字节,不能使用字节流来操作。字符流可以操作16位,所以对于文本文件常用字符流操作。
File 类
该类提供了对文件操作的一些功能
public static void classFile(){
File file = new File("test.txt");
System.out.println(file.getName());
file.delete();
}
File类操作
通过 File 类来创建文件
public static void createFile(){
File file = new File("test.txt");
if(!file.exists()){
try{
file.createNewFile();
}
catch (IOException e){
e.printStackTrace();
}
}
else {
System.out.println("文件已存在");
}
}
如果本地已有该文件,createNewFile() 不会创建新的文件,也不会覆盖。
mkdir()方法可以创建文件夹
mkdirs()方法可以创建多级文件夹
流操作
字节流
读取文件
public static void readFile(){
File file = new File("test.txt");
try {
FileInputStream fileInputStream = new FileInputStream(file);
int i = fileInputStream.read();
while(i > 0){
System.out.print((char)i);
i = fileInputStream.read();
}
}catch (FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
}
read()方法返回 -1 的话,说明文件读取完毕。
写入文件
public static void writeFile() {
File file = new File("test.txt");
try{
FileOutputStream outputStream = new FileOutputStream(file,true);
byte[] content = {'I',' ','w','i','l','l'};
outputStream.write(content);
}catch (FileNotFoundException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
}
true为追加,false为覆盖。
FileOutputStream 和FileInputStream 分别是 OutputStream 和 InputStream 接口的实现类。
字符流
字符流的接口为 Reader 和 Writer。
输入流
Reader 比较重要的实现类有:
(1) InputStreamReader
InputStreamReader 的参数是 char 类型,char 为两个字节,一个汉字占据两个字节,所以 InputStreamReader 能读取汉字。
public static void Reader_InputStreamReader() {
File file = new File("test.txt");
try {
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
char[] c = new char[64];
int read = inputStreamReader.read(c);
System.out.println(new String(c));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
(2)FileReader
public static void Reader_FileReader(){
File file = new File("test.txt");
try {
FileReader fileReader = new FileReader(file);
char[] c = new char[64];
fileReader.read(c);
System.out.println(c);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
(3)BufferedReader
BufferedReader 是缓冲流,对 Reader 做缓冲,所以使用 BufferedReader 一定会用到 Reader。
public static void Reader_BufferedReader(){
File file = new File("test.txt");
try {
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while((line = bufferedReader.readLine()) != null)
System.out.println(line);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedReader 可以进行整行读取,所以可以保持文本的格式不乱。
输出流
public static void writer(){
File file = new File("/Users/s.jhuang/Desktop/JavaStudy/test.txt");
try {
FileOutputStream fileOutputStream = new FileOutputStream(file,true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write("要努力学习");
bufferedWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
要记得关闭流