- 為什么會有這個需求呢?
前兩天有個面試題,讓寫出讀取文件夾下所有文件的名稱,誒,說來慚愧,好長一段時間都在用框架寫怎刪改查,關於文件讀寫的API
早就忘了,再加上當時學的不牢固,那題就沒做出來(說到底還是自己的基礎不好)。這不是閑了下來,自己趕緊記錄下來
- 遞歸讀取指定文件夾下的所有文件,並保存到指定的txt文件中,不過遞歸的效率確實不怎么好。
import org.junit.Test;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
/**
* @Author: stone
* @Date: 2021/03/28 23:26:13
* @ClassName: ReadTxt
* @Description:
**/
public class ReadTxt {
@Test
public void WriteTxt() throws Exception {
String path = ""; //這里寫你要讀取的文件夾
String outputPath = "E:\\fileNameList.txt"; //這里寫你要保存到什么文件中,追加保存,不會覆蓋上一次保存的文件
ArrayList<String> fileNameList = readFiles(path, new ArrayList<String>());
System.out.println(fileNameList.size());
for (int i = 0; i < fileNameList.size(); i++) {
outputToTxt(fileNameList.get(i), outputPath);
}
}
/**
* @Author: stone
* @Param:
* @return:
* @Description: 遞歸讀取文件路徑下的所有文件
**/
public ArrayList<String> readFiles(String path, ArrayList<String> fileNameList) {
File file = new File(path);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
readFiles(files[i].getPath(), fileNameList);
} else {
String path1 = files[i].getPath();
String fileName = path1.substring(path1.lastIndexOf("\\") + 1); // Windows下,目錄是雙斜杠
fileNameList.add(fileName);
}
}
} else {
String path1 = file.getPath();
String fileName = path1.substring(path1.lastIndexOf("\\") + 1);
fileNameList.add(fileName);
}
return fileNameList;
}
/**
* @Author: stone
* @Param:
* @return:
* @Description: 將內容輸入到txt文件保存
**/
public void outputToTxt(String content, String outputPath) throws Exception {
FileWriter fileWriter = new FileWriter(outputPath, true); // true代表追加內容
PrintWriter printWriter = new PrintWriter(fileWriter);
printWriter.println(content);
printWriter.close();
fileWriter.close();
printWriter.flush();
}
}
- 使用
Java
的API
import org.junit.Test;
import java.io.File;
/**
* @Author: stone
* @Date: 2021/03/29 12:32:04
* @ClassName: fileTest
* @Description:
**/
public class fileTest {
public void listFilesForFolder(File folder) {
for (File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolder(fileEntry);
} else {
System.out.println(fileEntry.getName());
}
}
}
@Test
public void testFIle() {
File folder = new File(""); //自己定義要查找的路徑
listFilesForFolder(folder); // 結果打印在控制台
}
}
參考: