一、目录/文件
1.File
1)File构造:
private File(String pathname, int prefixLength)
private File(String child, File parent)
public File(String pathname)
public File(String parent, String child)
public File(File parent, String child)
public File(URI uri)
2)File类API操作
package com.gaj.day01;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* File
* 文件/目录操作 File类
* @author Jan
*
*/
public class Demo1 {
public static void main(String[] args) throws IOException {
// File f = new File("E:\\data\\java\\a.txt");
File f = new File("E:/data/java");
System.out.println("文件/目录是否存在:" + f.exists());
System.out.println("是否为目录:" + f.isDirectory());
System.out.println("是否为文件:" + f.isFile());
System.out.println("该目录下的子文件或目录(返回String[],不包含路径):" + f.list());
for (String string : f.list()) {
System.out.println(string);
}
System.out.println("该目录下的子文件或目录(返回File[]):" + f.listFiles());
for (File file : f.listFiles()) {
System.out.println(file);
}
System.out.println("新建目录(父目录不存在不创建):" + f.mkdir());
System.out.println("新建目录(父目录不存在创建):" + f.mkdirs());
System.out.println("文件是否新建:" + f.createNewFile());
System.out.println("文件/目录路径:" + f.getPath());
System.out.println("文件/目录名:" + f.getName());
System.out.println("文件/目录是否可读:" + f.canRead());
System.out.println("文件/目录是否可写:" + f.canWrite());
System.out.println("最后一次修改时间:" + f.lastModified());
Date date = new Date(f.lastModified());
SimpleDateFormat simpledf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(simpledf.format(date));
System.out.println("文件/目录的大小:" + f.length()); // 返回字节数
// System.out.println("文件/目录是否删除:" + f.delete());
}
}
3)小例子
package com.gaj.day01;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* 1.输入一个目录,遍历展示所有子目录
* 2.输入一个目录,若不存在则创建该目录
* @author Jan
*
*/
public class Demo2 {
public static void main(String[] args) {
// Scanner scanner = new Scanner(System.in);
// System.out.println("Please enter a directory:");
// String path = scanner.next();
// scanner.close();
String path = "E:/data/java";
List<String> list = new ArrayList<>();
File f = new File(path);
if(f.exists()){
list = showAllFilePath2(f, list);
for (String string : list) {
System.out.println(string);
}
}
else{
f.mkdirs();
System.out.println("目录创建成功!");
}
}
@SuppressWarnings("unused")
private static void showAllFilePath(File path){
if(path.isDirectory()){
for (File f : path.listFiles()) {
System.out.println(f);
showAllFilePath(f);
}
}
}
private static List<String> showAllFilePath2(File path, List<String> list){
if(path.isDirectory()){
for(int i = 0; i < path.listFiles().length; i++){
list.add(path.listFiles()[i].toString());
showAllFilePath2(path.listFiles()[i], list);
}
}
return list;
}
}
2.FileFilter和FileNameFileter
1)接口描述
用于过滤需要的文件/目录
这两个接口都是函数式接口 因此可以使用Lambda表达式
2)小例子
package com.gaj.day01;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.Iterator;
/**
* 文件过滤器
* String[] FileNameFileter 与list()搭配
* File[] FileFilter 与listFiles()搭配
* @author Jan
*
*/
public class Demo3 {
public static void main(String[] args) {
String path = "E:/data/java";
File file = new File(path);
String[] s = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});
System.out.println(Arrays.toString(s));
s = file.list((d,n) -> n.endsWith(".java"));
Arrays.stream(s).forEach(System.out::println);
File[] f = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.toString().endsWith(".java");
}
});
System.out.println(f[0]);
f = file.listFiles(p -> p.toString().endsWith(".txt"));
Iterator<File> i = Arrays.stream(f).iterator();
while(i.hasNext()){
System.out.println(i.next());
}
for (File fi : f) {
if(fi.isFile())
System.out.println("文件:" + fi.getName());
else if(fi.isDirectory())
System.out.println("目录:" + fi.getPath());
}
}
}