檔案IO的兩個小需求
阿新 • • 發佈:2021-02-06
技術標籤:java進階筆記
首先來一刀小需求:
列印指定目錄下的所有的以
.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();
}
}
}
}
最後結果如下: