IO流
File
构造方法
File(String pathname)
根据一个路径得到File对象
File(String parent, String child)
根据一个目录和一个子文件/目录得到File对象
File(File parent, String child)
根据一个父File对象和一个子文件/目录得到File对象
File类的创建功能
boolean mkdir()
创建文件夹,如果存在这样的文件夹,就不创建了,路径不存在返回flase
boolean mkdirs()
创建文件夹,如果父文件夹不存在,会帮你创建出来
boolean createNewFile()
创建文件,路径不存在抛出异常,如果存在这样的文件,就不创建了
File类的获取功能
String getAbsolutePath()
获取文件的绝对路径
File getAbsoluteFile()
获取文件的绝对路径
String getPath()
获取文件的相对路径
String getName()
获取名称
String[] list()
获取指定目录下的所有文件或者文件夹的名称数组
File[] listFiles()
获取指定目录下的所有文件或者文件夹的File数组
File[] listRoots()
获取电脑中的盘符
String[] list (FilenameFilter filter)
获取指定目录下被FilenameFilter筛选后的文件,返回String类型数组
File类的判断功能
判断当前File类型是否是一个文件夹,isDirectory()
判断当前File类型是否是一个文件,isFile()
File类的删除功能
boolean delete()
若是文件就直接删除,若是文件夹则必须是空文件夹
递归
public static int f(int x){
if (x == 0) {
return 0;
}else if (x == 1) {
return 1;
}
return f(x-1)+f(x-2);
}
字节输入流【FileInputStream】
1.关联实体文件,创建FileInputStream对象
2.调用read方法
3.关闭输入流【close】
构造方法
FileInputStream(File file)
返回一个字节输入流对象,该对象使用字节流读取文件,参数为File类型关联实体文件
FileInputStream(String name)
返回一个字节输入流对象,传入的name为路径+文件名
字节
字节输出流【FileOutputStream】
1.关联实体文件,创建输出流对象
2.调用write方法
3.关闭输出流
FileOutputStream(File file)
返回一个字节输出流对象,参数为File类型关联实体文件
FileOutputStream(String name)
返回一个字节输出流对象,参数为String类型,取值为路径+文件名
向文件中设置是否追加数据:
FileOutputStream(File file, boolean append)
返回一个字节输出流对象,参数1File类型关联实体文件,参数2布尔值true代表追加
FileOutputStream(String name, boolean append)
返回一个字节输出流对象,参数1String类型关联实体文件,参数2布尔值true代表追加
字符流
字符输入流【FileReader】
1.关联实体文件,创建FileReader对象
2.调用read方法
3.关闭输入流【close】
使用构造函数:
FileReader(File file)
返回一个字符输入流对象,该对象使用字符流读取文件,参数为File类型关联实体文件
FileReader(String name)
返回一个字符输入流对象,传入的name为路径+文件名
使用字符输入流对象读取文件:
字符输入流对象在读取到最终的数据结尾时,返回-1
int read()
单字符读取文件,返回读取的下一次的数据字符数,若下一次读取没有数据则返回为-1
int read(char[] c)
多字符读取文件,读取指定数组长度的数据字符,若下一次读取没有数据则返回为-1
多字符读取时,使用byte类型的数组作为缓冲区,可能会存在数据重复问题
int read(char[] c,int off,int len)
多字符读取文件,读取指定数组长度的数据字符,若下一次读取没有数据则返回为-1
参数2和参数3是针对数组缓冲区进行的设置
参数off:从缓冲区数组第几个下标开始读取
参数len:从缓冲区数组中读取指定长度的数据
注意:参数2和参数3相加的值不能大于等于数组的长度,否则会引发下标异常
字符输出流【FileWriter】
1.关联实体文件,创建输出流对象
2.调用write方法
3.关闭输出流
字符输出流对象,构造函数:
FileWriter(File file)
返回一个字符输出流对象,参数为File类型关联实体文件
FileWriter(String name)
返回一个字符输出流对象,参数为String类型,取值为路径+文件名
向文件中设置是否追加数据:
FileWriter(File file, boolean append)
返回一个字符输出流对象,参数1File类型关联实体文件,参数2布尔值true代表追加
FileWriter(String name, boolean append)
返回一个字符输出流对象,参数1String类型关联实体文件,参数2布尔值true代表追加
字符输出流对象输出数据到指定文件
注意:
如果输出的路径不存在会抛出异常,如果输出的路径存在而文件不存在则会创建新的文件
如果不需要对输出的文件进行追加效果,那么需要在创建输出流对象的时候添加布尔值
void write(int b)
将指定字符写入文件输出流中
void write(char[] c)
将指定的char数组中的数据写入到文件
void write(char[] c,int off,int len)
将指定char数组中的数据指定起始位置和长度的数据输出到文件中
void write(String str)
将字符串输出到指定的文件中
void write(String str,int off,int len)
指定字符串的起始位置和长度,输出到指定的文件中
转换流
字节流转字符流【InputStreamReader】
字节流转成字符流的步骤:
1.准备一个字节流
2.将字节流转成字符流输出
3.关闭流
API
将字节流转换为字符流,使用InputStreamReader构造函数
InputStreamReader(InputStream in)
将字节流对象包装成一个InputStreamReader对象,默认使用本机字符编码
InputStreamReader(InputStream in,String charset)
将字节流对象包装成一个InputStreamReader对象,使用指定的编码格式
代码示例
先使用字节流读取包含中文的文件并输出
FileInputStream fis = new FileInputStream
(“D:/work/STS/JavaSE-Day24-IO/src/cn/itsource/readerandwriter/ReaderAndWriterTest.java”);
byte[] b=new byte[4];
int len;
StringBuilder build=new StringBuilder();
while ((len=fis.read(b))!=-1) {
build.append(new String(b));
}
System.out.println(build.toString());
fis.close();
字符流转字节流【OutputStreamWriter】
字符流转字节流步骤:
1.准备一个字符流
2.将字符流转换为字节流
3.关闭流
API
将字符流转换为字节流:
OutputStreamWriter(OutputStream out)
将一个字符流中的数据内容写入到转换为显示指定的字节流对象
OutputStreamWriter(OutputStream out,String charset)
使用指定的编码格式将字符流转换为字节流
代码示例
字符流输出数据到文件中,使用字节流关联文件
FileOutputStream fos = new FileOutputStream
(“D:/work/STS/JavaSE-Day24-IO/5.txt”); //字节流关联实体文件
OutputStreamWriter osw = new OutputStreamWriter(fos); //字符流输出
osw.write(“输出中文”);
osw.close();
fos.close();