首先来一刀小需求:
打印指定目录下的所有的以
.txt
结尾的文件
思路也好办,首先使用一个File
类来完成指定路径的封装,然后使用递归找到这个指定目录下所有文件,只要文件名字以.txt
结尾,就打印当前文件的名字
文件目录如下:
实现代码如下:
public static void main(String[] args) {
File file = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test");
printTxt(file);
}
public static void printTxt(File file){
if (file == null) return;
if (file.isDirectory()){
File[] files = file.listFiles();
for (File f :
files) {
printTxt(f);
}
}else {
String fileName = file.getName();
if (fileName.endsWith(".txt")) {
System.out.println(fileName);
}
}
}
当然,File
类也有自己的操作,可以使用File
类重载的listFiles(FilenameFilter filter)
方法
public static void main(String[] args) {
File file = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test\\demo");
File[] files = file.listFiles(new MyFileNameFilter());
for (File f :
files) {
System.out.println(f.getName());
}
}
static class MyFileNameFilter implements FilenameFilter{
//File dir: 父级文件的名字
//String name: 当前文件的名字
@Override
public boolean accept(File dir, String name) {
if(name.endsWith(".txt")){
return true;
}
return false;
}
}
反正,两种方案,大家按需选择,这两种方法有区别:
- 使用
listFiles(..)
方法只会遍历当前目录下的所有文件!!!
然后,就可以探讨File类后面的知识点,流的操作啦
又一个小需求!!!
流的分类大家都清楚,输入流,输出流,节点流这些都是不同角度划分出来的不同分类,大家可以自行百度详细情况
是用流实现文件的复制
//使用Java实现文件的复制
File inFile = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test\\demo\\a.txt");
File outFile = new File("D:\\BaiduNetdiskDownload\\dailyLearning\\src\\com\\llm\\test\\demo\\b.txt");
if (!outFile.exists()){
//如果没有就创建一个
try {
outFile.createNewFile();
} catch (IOException e) {
System.err.println("创建文件失败:"+outFile.getAbsolutePath());
}
}
//声明输入和输出流
FileInputStream fIn = null;
FileOutputStream fOu = null;
try {
fIn = new FileInputStream(inFile);
fOu = new FileOutputStream(outFile);
byte[] bytes = new byte[1024];
int len = 0;
while ((len = (fIn.read(bytes))) != -1){
fOu.write(bytes,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fIn!=null){
try {
fIn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fOu!=null){
try {
fOu.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
最后结果如下: