1、File
返回值 | 方法名 | 备注 |
---|---|---|
boolean | canRead() | 是否能读取该路径的文件 |
boolean | canWrite() | 是否能编辑该路径的文件 |
boolean | createNewFile() | 创建一个新的文件 |
boolean | mkdir() | 创建文件夹 |
boolean | mkdirs() | 创建多级文件夹 |
boolean | delete() | 删除文件或文件夹 |
boolean | exists() | 查看文件是否存在 |
Long | length() | 返回文件的长度 |
String | getName() | 获取文件名 |
String | getPath() | 获取文件路径 |
String | getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
boolean | isDirectory() | 判断是否为文件夹 |
File | listFiles() | 获取所有文件和文件夹 |
2、IO流
2.1 字节流
字节流:读取一切文件,
FileInputStream和FileOutputStream数据量比较大的时候速度比较慢,可以使用BufferedInputStream和BufferedOutputStream
2.1.1 字节输入流
2.1.1.1 FileInputStream
从文档中读取信息,read()
// FileInputStream fileInputStream = new FileInputStream("E:\\FileTest\\123.txt");
File file = new File("E:\\FileTest\\123.txt");
//可以直接传字符串的路径,也可以传file进去
FileInputStream fileInputStream = new FileInputStream(file);
int ch=0;
//read()读不到东西就会等于-1,所以只要不等于-1就输出
while ((ch=fileInputStream.read())!=-1){
System.out.print((char)ch);
}
fileInputStream.close();
2.1.1.2 BufferedInputStream
BufferedInputStream:字节缓冲输入流
InputStream fis = new FileInputStream("E:\\FileTest\\123.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
//每次读取数据的大小,理论上来说数值越大,速度越快
byte[] bytes = new byte[1024];
int len=0;
while ((len=bis.read(bytes))!=-1){
System.out.println(len);
}
fis.close();
bis.close();
2.1.2 字节输出流
2.1.2.1 FileOutputStream
write(byte[] b) :在文件中写入字节数组
String str=IoDemo01.class.getName();
//FileOutputStream可以有两个参数,第一个参数是路径,如果这个路径不存在,就在该路径创建一个,第二个参数为是否追加到文件尾部,
// 也可以不写第二个参数,默认是false,覆盖原有的信息,如果想要设置为追加,改为true
FileOutputStream out=new FileOutputStream("E:\\\\FileTest\\\\111.txt",true);
out.write(str.getBytes());
out.close();
write(int b) :在文件中写入字节
FileInputStream fs = new FileInputStream("E:\\FileTest\\123.txt");
FileOutputStream fo=new FileOutputStream("E:\\\\FileTest\\\\111.txt");
int ch=0;
//从fs中读出一个个字节,然后一个个字节再写入fo中
while ((ch=fs.read())!=-1){
fo.write(ch);
}
fs.close();
fo.close();
2.1.2.2 BufferedOutputStream
Long start=System.currentTimeMillis();
InputStream fis=new FileInputStream("F:\\迅雷下载\\ideaIU-2020.1.exe");
BufferedInputStream bis=new BufferedInputStream(fis);
OutputStream fos = new FileOutputStream("E:\\FileTest\\ideaIU-2020.2.exe");
BufferedOutputStream bos=new BufferedOutputStream(fos);
//每次读取数据的大小,理论上来说数值越大,速度越快
byte[] bytes = new byte[1024];
int len=0;
while ((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bis.close();
bos.close();
Long end=System.currentTimeMillis();
System.out.println(end-start);
2.2 字符流
读取纯文本文件方便,帮我们处理了乱码问题。Buffered效率高
2.2.1 字符输入流
2.2.1.1 FileReader
FileReader fileReader = new FileReader("E:\\FileTest\\111.txt");
char[] chars = new char[1024];
int len=0;
while ((len=fileReader.read(chars))!=-1){
System.out.println(len);
//char数组转成Strings输出,从chars的下标0开始,读取长度len
String str=new String(chars,0,len);
System.out.println(str);
}
fileReader.close();
2.2.1.2 BufferedReader
Reader reader = new FileReader("E:\\FileTest\\111.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
char[] chars = new char[1024];
int len=0;
while ((len=bufferedReader.read(chars))!=-1){
//char数组转成Strings输出,从chars的下标0开始,读取长度len
String str=new String(chars,0,len);
System.out.println(str);
}
2.2.2 字符输出流
2.2.2.1 FileWriter
String str="//char数组转成Strings输出,从chars的下标0开始,读取长度len";
//拿到要输出的对象,可以设置第二个参数boolean类型,不设置默认false,true就是追加在文本末尾,false是覆盖原有文本
FileWriter fileWriter = new FileWriter("E:\\FileTest\\111.txt",true);
//写入
fileWriter.write(str);
fileWriter.close();
2.2.2.2 BufferedWriter
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:\\FileTest\\111.txt"));
bufferedWriter.write("用于读取字符流的抽象类。 子类必须实现的唯一方法是read(char [],int,int)和close()。 然而,大多数子类将覆盖这里定义的一些方法,以便提供更高的效率,附加的功能或两者。 ");
//和其它的不一样,必须flush才能写到指定文本
bufferedWriter.flush();
bufferedWriter.close();
3、获取大小
不管哪种方法,获取的大小基本都有误差,使用第三种就可以了
3.1 File通过length()
只有File有这个方法,FileInputStream没有
3.2 通过available()
它返回值是int,文件太大的话,会达到int的上限
3.3 通过FileChannel工具
fs.getChannel().size()获取大小
MultipartFile获取文件大小
MultipartFile的getSize()方法