File:
- public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File 实例。
- public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File 实例。
- public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File 实例
- public String getAbsolutePath():返回此 File 的绝对路径名字符串。
- public String getPath():将此 File 转换为路径名字符串。
- public String getName():返回由此 File 表示的文件或目录的名称。
- public long length():返回由此 File 表示的文件的长度。 (得到的字节的大小)
- String getParent():返回此 File 对象所对应的目录的父目录,以工作路径为准,如果已经在工作路径的根目录下,则返回 null,否则返回父目录。
- boolean renameTo(File newName):重命名此 File 对象所对应的文件或目录,成功返回 true,否则返回false。
- 注意:文件名字和文件路径的区别。
可见,重命名比得到名字麻烦。
- public boolean exists():此 File 表示的文件或目录是否实际存在。 (能创建文件对象,并不意味着,磁盘中里面有这个文件或者目录)
- public boolean isDirectory():此 File 表示的是否为目录。
- public boolean isFile():此 File 表示的是否为文件。
- boolean canWrite():判断 File 对象所对应的文件和目录是否可写。
- boolean canRead():判断 File 对象所对应的文件和目录是否可读。
- boolean isAbsolute():判断 File 对象所对应的文件或目录是否绝对路径。例如:如果在Unix/Linux 等系 统上,如果路径名的开头是/,则表明 File 对象对应一个绝对路径,在 Windows 等系统上,如果路径开头 是盘符,则说明它是一个绝对路径
- public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
- public boolean delete() :删除由此 File 表示的文件或目录。(注意,这个删除,会把硬盘的文件删除)
- public boolean mkdir() :创建由此 File 表示的目录。
- public boolean mkdirs() :创建由此 File 表示的目录,包括任何必需但不存在的父目录。
?创建目录:(文件夹)
- ?单极目录:就在已经创建的目录的基础上只需要在创建一层的目录。
- 多级目录:在已有的目录下面需要再创建多层目录的情况;(关键是看待创建目录的多少级的问题)
- long lastModified():返回文件的最后修改时间。
- long length():返回文件内容的长度。
- public String[] list() :返回一个 String 数组,表示该 File 目录中的所有子文件或目录。
- public File[] listFiles() :返回一个 File 数组,表示该 File 目录中的所有的子文件或目录。
- 两者也可以包含FileFilter的文件过滤器,且只能返回当前目录的一级文件和文件夹。
FileFilter 类:(文件过滤器)
- boolean accept(File pathname); //判断指定抽象路径名是否应该包含在某个路径名列表中 。
?小工具:重命名小工具:
?注意:原文件没有删除,是重命名了,因为创建文件对象,并不会在磁盘上创建文件,所以,原文件只是变了个名字。
修改指定的一个文件:
注意:①创建目标文件的时候,一定要在父类文件夹的里面建立
②最后的剪切不是删除,就是重命名。
修改多级文件:
package Java后端开发基础.文件;
import com.sun.javafx.iio.common.SmoothMinifier;
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Scanner;
public class 集体重命名小工具 {
private File file;//总文件夹
private String filestart;
private String fileend;
private String dirstart;
private String dirend;
public 集体重命名小工具(File file, String filestart, String fileend, String dirstart, String dirend) {
this.file = file;
this.filestart = filestart;
this.fileend = fileend;
this.dirstart = dirstart;
this.dirend = dirend;
refile(file);
}
public void newstring(File file, String startelnment, String endelement){
//重命名:三部曲
// 第一步:获得新名字
StringBuilder oldname = new StringBuilder(file.getName());//运算速度远超string
int start = oldname.indexOf(startelnment);
int end = oldname.indexOf(endelement);
String newname = oldname.delete(start, end+1).toString();
// 第二步,创立目标文件
File file2 = new File(file,newname);//在父文件夹里面创建
// 第三步:重命名
file.renameTo(file2);
}
public void refile(File file){//传入的文件一定是个文件夹
File[] files = file.listFiles();
for(File file1:files){
if(file1.isFile()){//是个文件(出口)
newstring(file1,filestart,fileend);//对文件重命名
} else{//说明是个文件夹
refile(file1);
}
// 对文件夹重命名
newstring(file,dirstart,dirend);
}
//对文件夹重命名;(包含总文件夹在内的所有的文件夹)
newstring(file, dirstart, dirend);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请依次输入:总文件路径,要删除文件字符串的第一个字符及最后一个字符,要删除文件夹字符串的第一个和最后一个字符");
System.out.println("注意:各个参数之间使用/隔开,没有可以写");
String accept = scanner.next();
System.out.println(accept);
String[] strings = accept.split( "/");//以空格隔开
System.out.println(Arrays.toString(strings));
File file = new File(strings[0]);
集体重命名小工具 test = new 集体重命名小工具(file, strings[1], strings[2], strings[3],strings[4]);
}
}
?删除文件夹操作:
注意:先把文件夹里面的文件删除,删除后文件,再删除空文件夹(空文件夹才可以删除,像那种空文件夹套空文件夹似的总文件夹,也不能删除,这个文件夹里面什么都没有了才可以)
JDK8新特性:
?函数式编程:
?
修订后:
InputStream 字节输入流:(抽象类)
直接子类FileInputStream
- int read():从输入流中读取单个字节,返回所读取的字节数据。
- int read(byte[] b):从输入流中最多读取 b.length 个字节的数据,并将其存储在字节数组 b 中,返回实际 读取的字节数。
- int read(byte[] b,int off,int len):从输入流中最多读取 len 个字节的数据,并将其存储在数组 b 中,放入 数组 b 中时,并不是从数组起点开始,而是从 off 位置开始,返回实际读取的字节数。
Reader 字符输入流 :(抽象类)
OutputStream 字节输出流:(抽象类)
直接子类FileOutputStream
- void write(int value):将指定的字节输出到输出流中。
- void write(byte[] buf):将字节数组中的数据输出到指定输出流中。
- void write(byte[] buf,int off,int len):将字节数组中从 off 位置开始,长度为 len 的字节输出到输出流中
?Writer 字符输出流
- void write(int c):将指定的字符输出到输出流中。
- void write(char[] buf):将字符数组中的数据输出到指定输出流中。
- void write(char[] buf,int off,int len):将字符数组中从 off 位置开始,长度为 len 的字符输出到输出流中。
- ?Writer 是一个字符输出流的抽象基类,并不能创建实例对象。Java 为该类提供了一个默认的实现类 FileWriter。
复制文件:
?装饰者模式:
?装饰类:
转换流 InputStreamReader和 OutputStreamWriter都是包装流,是reader和writer的直接子类,实现字节流到字符流的转化,他们的构造方法还支持指定字符集;
缓冲流:
?BufferedReader:(本质是个字符流)
- BufferedReader(Reader reader):创建一个使用默认大小输入缓冲区的缓冲字符输入流。
- BufferedReader(Reader reader,int size):创建一个使用指定大小输入缓冲区的缓冲字符输入流。
BufferedWriter:
- BufferedWriter(Writer writer):创建一个使用默认大小输入缓冲区的缓冲字符输出流。
- BufferedWriter(Writer writer,int size):创建一个使用指定大小输入缓冲区的缓冲字符输出流。
注:写入的数据并不会先输出到目的地,而是先存储至缓冲区中。 如果缓冲区中的数据满了,才会一次对目的地进行写出。如果要在缓冲区中数据未满的情况下将数据写入到目的地, 需要使用 flush()方法,将数据刷新一下。
实现多重文件夹的复制:(本质:递归思想)
package Java后端开发基础.文件;
import java.io.*;
public class test {
public void copy(File src,File dest) throws IOException {
//字节流复制,字节流对字节流文件对文件不会产生汉字的乱码
InputStream inputStream = new FileInputStream(src);
File file = new File(dest, src.getName());
if(!file.exists()){//这个可以不写,对于文件,不写,会自动创建实体的文件
file.createNewFile();
}
OutputStream outputStream = new FileOutputStream(file);
byte[] bytes = new byte[10];
int size = -1;
while((size = inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,size);
}
outputStream.close();
inputStream.close();//先进的后关
}
public void copyfile(File src,File dest) throws IOException {
String newname = src.getName();//得到要复制文件夹的名字
File newfile = new File(dest, newname);//创建目标文件夹对象
if(!newfile.isDirectory()){//创建相应的文件夹
newfile.mkdirs();//创建空的
}
File[] files = src.listFiles();
for(File file:files){
if(file.isFile()){
//复制
copy(file,newfile);
}else{
copyfile(file, newfile);
}
}
}
public static void main(String[] args) throws IOException {
test test = new test();
File file = new File("src/数据结构");
File file1 = new File("E:/");
test.copyfile(file,file1);
}
}
?相对路径:
- idea默认的相对路径是项目本身的位置;
- ./表示当前的路径,写不写无所谓,
- ../表示返回上级路径,
待续~~~~~~~~~~~~~~~~~~~~
|