使用方法 new File(“路径”)
File file = new File("D:/file/");
1.file.exists // 判断是否存在
2.file.isFile() // 判断是文件
3.file.isDirectory()// 判断是文件夹
4.file.mkdir() //创建单个文件夹
5.file.mkdirs() //创建多个文件夹
6.file.createNewFile() //创建新文件
7.file.getPath() //获取文件路径
8.file.getName() //获取文件名
9.file.getParent() //获取父级路径名
10.file.getParentFile()//获取父级路径新文件
11.renameTo(“新路径”) //移动文件
12.file.delete() // 删除该文件
13.file.list() //获取该路径下的所有文件或文件夹
14.file.listFiles() //获取当前路径下所有的文件
15.File.separator // 代表“/”,根据系统自动判断
根据路径获取当前文件夹下的文件可能存在多个使用数组接受
File []file = delListFile("D:/file/")
private File[] delListFile(String path) {
return new File(path).listFiles((File file) ->
file.isFile()&& //判断是否为文件
file.getName().startsWith("tas_") //文件名称开始字段
&& file.getName().endsWith(".txt")); // 判断文件后缀
}
if(!new File("D:/file/").exists()){
new File("D:/file/").mkdirs() // 创建多个
new File("D:/file/").mkdir() // 创建单个
}
1.判断文件是否存在
//不存在进行创建
if(!new File("D:/file/").exists()){
方法一(推荐)、:
new File("D:/file/").createNewFile();
方法二(若使用会自动创建):
FileOutputStream creatFile = new FileOutputStream(new File("D:/file/")); // 担心问题,需要创建线程需要关闭
creatFile.close();
}
需求:删除10分钟之前的文件
1具体是功能根据自己可以调整,这里将方法封装为了方法,可以之间搬过去–希望可以为你建房添瓦
//先创建时间
public static final Logger LOG = LoggerFactory.getLogger(当前的class文件.class);
String path = "D:/file/"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date( System.currentTimeMillis()));
calendar.add(Calendar.YEAR,0);//当前时间减去一年,即一年前的时间
calendar.add(Calendar.MONTH, 0);//当前时间前去一个月,即一个月前的时间 ;
calendar.add(Calendar.DAY_OF_MONTH,0);
calendar.add(Calendar.HOUR,0);
calendar.add(Calendar.MINUTE,10);
calendar.add(Calendar.SECOND,0);
filterListFile(path ,dateFormat.format(calendar.getTime())); // 此处是公用方法传入参数(路径String,定义好的时间)
2创建方法
private void filterListFile(String sendAddress, String format) { //接收来的路径,日期
LOG.info("删除日期超时的文件");
File[] fileArray= delListFile(sendAddress); // 此处过滤想要的文件,方法见3
if(fileArray.length>0){
for (File file : fileArray) {
String fileData = getCreationTime(file); // 此处可以获取创建的文件时间,返回string 日期,方法见4
int result=fileData.compareTo(format);//小<大 (日期格式保持一致)
// 文件创建时间 《=》 定义时间
//若 result <0 说明文件创建时间 《 定义时间
//若 result = 0 说明两者相同
//若 result >0 说明 文件创建时间 》 定义时间
if(result<0){
System.gc(); // 回收资源
boolean delete = file.delete(); //条件为true 执行删除该文件
LOG.info("当前删除结果:{}",delete);
}
}
}
}
3获取所要的文件
private File[] delListFile(String path) {
return new File(path).listFiles((File file) ->
file.isFile()&& //判断是否为文件
file.getName().startsWith("tas_") //文件名称开始字段
&& file.getName().endsWith(".txt")); // 判断文件后缀
}
4获取文件的创建日期返回string
private String getCreationTime(File file) {
BasicFileAttributes attr = null;
try {
Path path = file.toPath();
attr = Files.readAttributes(path, BasicFileAttributes.class);
} catch (IOException e) {
e.printStackTrace();
}
// 创建时间
Instant instant = attr.creationTime().toInstant();
String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()).format(instant);
return format; // 获取的时间格式需要与对比的保持一致
}
为了速度可以使用stream流
File synFile = new File("D:/file/file.txt");
String start ="2020-08-08"
FileOutputStream fileOutputStream = new FileOutputStream(synFile,false);
//第二个参数,判断是否进行拼接,false:表示不拼接,每次写入会将原数据清空。
byte[] b=start.getBytes(); // 获取字节
fileOutputStream.write(b); //写入传的数组是byte不是Byte
fileOutputStream.write("\n".getBytes()); // 写一次就执行一次换行
fileOutputStream.flush();//起到行刷新的功能
fileOutputStream.close();//写入完毕,关闭流
为了速度可以使用stream流
File synFile = new File("D:/file/file.txt");
String time = null;
if (synFile.exists()) { // 判断是否存在
//获取同步日期
FileInputStream fileInputStream = new FileInputStream(synFile); // 创建转换流
byte[] b = new byte[10 * 1024]; //定义一次读取数量
while((fileInputStream.read(b))!=-1){ //-1:文件无数据
time = new String(b).trim();
}
fileInputStream.close(); //关闭流
}
创建思路:创建一个方法和一个在该方法下的一个循环体
@Override
public void getDelTmpFile() { // 创建方法
// 执行删除操作
delAllFile(path); //循环体 里面的参数可以在创建方法参数中传递下来
}
private void delAllFile(String path) { //需要删除路径
File [] superFile = listFileDel(path);
for (int i=0;i<superFile.length;i++){
if(superFile[i].isDirectory()){ // 是文件夹则递归获取
delAllFile(superFile[i].getAbsolutePath()); // 递归循环
}else {
superFile[i].delete(); //若是文件直接删除
}
}
new File(path).delete(); // 不管是什么最终删除跟路径
}