//筛选文件:
// 1. 匿名内部类
// 2. lambda表达式
// 3. 单独创建一个类去实现 FileFilter或者FilenameFilter接口
1.匿名内部类实现文件晒选
public static void main(String[] args) {
File directory = new File("D:\\idea工作区\\第二册\\13_io\\src\\file\\file");
//new FilenameFilter接口时使用立即实现,即把此接口中的方法全部实现。这种叫做匿名内部类
String[] fileNames = directory.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// 实现筛选文件的规则: 找出大于500k的*.doc & *.docx的文件
File testFile = new File(dir, name);
return name.endsWith(".txt");
}
});
for (String f : fileNames) {
System.out.println(f);
}
}
2.箭头函数实现文件晒选
public static void main(String[] args) {
File directory = new File("C:\\Users\\Administrator\\Desktop\\Learn");
File[] files = directory.listFiles((dir , name ) -> {
File testFile = new File(dir, name);
return (testFile.length() > 2*1024) && ( name.endsWith(".txt"));
});
for (File f : files) {
System.out.println(f.getName() + ", size:" + f.length());
}
}
3.单独创建一个类去实现 FileFilter或者FilenameFilter接口
1.建的类
package filefiler;
import java.io.File;
import java.io.FilenameFilter;
public class FileExtentionFilter implements FilenameFilter {
//文件扩展名: txt, mp3
private String extention;
public FileExtentionFilter(String extention) {
this.extention = extention;
}
/**
* 筛选文件,被筛选目录中的每一个文件都会调用此方法
*/
@Override
public boolean accept(File dir, String name) {
return name.endsWith(this.extention);
}
}
2.使用
public static void main(String[] args) {
File directory = new File("D:\\idea工作区\\第二册\\13_io\\src\\file\\file");
//返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
File[] files = directory.listFiles(new FileExtentionFilter(".java"));
for (File file : files) {
System.out.println(file);
}
}
4.实现文件复制
第三种方式实现文件复制;
package filefiler;
import java.io.*;
public class TypeFileCopy {
public static void main(String[] args) {
//资源文件地址
File dir = new File("e:\\mp3");
//晒选java文件
File[] txtFiles = dir.listFiles(new FileExtentionFilter(".java"));
//写出地址
File txtOutDir = new File("e:\\text");
if (!txtOutDir.exists()) {
// 目录不存在则创建
txtOutDir.mkdirs();
}
// 遍历每个要写出去的文件
for (File txtFile : txtFiles) {
// 写出的文件
File outFile = new File(txtOutDir, txtFile.getName());
try (BufferedReader br = new BufferedReader(new FileReader(txtFile));
// 读源文件
BufferedWriter bw = new BufferedWriter(new FileWriter(outFile))
// 写目标文件
) {
String line = null;
while ((line=br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
5.图片复制
public static void main(String[] args) {
//创建输入输出字节流
try (FileInputStream fileInputStream = new FileInputStream("E:\\a1.jpg");
FileOutputStream fileOutputStream = new FileOutputStream("E:\\aaa.jpg")
) {
//创建缓冲区
byte[] bytes = new byte[1024 * 10];
int len = -1;
while ((len=fileInputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
}
} catch (IOException e) {
}
}
6.mp3截取
public static void main(String[] args) {
//截取MP3音乐
try (FileInputStream fileInputStream = new FileInputStream("E:\\123.mp3");
FileOutputStream fileOutputStream = new FileOutputStream("E:\\音乐.mp3");
) {
//10秒长的MP3文件
byte[] bytes = new byte[409600];
//跳过n个字节
fileInputStream.skip(409600);
//写进缓冲区
fileInputStream.read(bytes);
//写出到文件
fileOutputStream.write(bytes);
} catch (IOException e) {
}
}