前提
Javaを勉強中です。
再帰処理の勉強をしている中で、問題がとけません。
実現したいこと
特定のファイル拡張子”.xlsx”と".jfif"を含むファイルのみ削除した後に、ディレクトリが空だったら削除をしたい。
該当のソースコード
メインコード
java
1import java.io.File; 2 3public class Recursion { 4 public static void main(String[] args) { 5 String filePath = "C:\\Work\\aaa"; 6 File target = new File(filePath); 7 recurse(target); 8 9 } 10 11 private static void recurse(File target) { 12 File[] files = target.listFiles(); 13 for (File file : files) { 14 if (file.isDirectory()) { 15 16 System.out.println("D:" + file.getName()); 17 recurse(file); 18 19 } else { 20 // ファイル名の取得 21 String fileName = file.getName(); 22 // 三項演算子で拡張子がある場合=trueの場合は拡張子、ない場合=falseは空文字を返す 23 String extension = (fileName.lastIndexOf(".") != -1) ? fileName.substring(fileName.lastIndexOf(".")):""; 24 25 // 拡張子に".xlsx"または".jfif"を含むファイルを削除 26 if (".xlsx".equals(extension) || ".jfif".equals(extension)) { 27 file.delete(); 28 //ファイルが存在しなければ削除 29 if (!(file.exists())) { 30 file.delete(); 31 32 } 33 34 } 35 36 } 37 38 39 40 System.out.println("F:" + file.getName()); 41 } 42 43 } 44 45}
txt
1C:\Work\aaa\a1.txt 2C:\Work\aaa\a2.txt 3C:\Work\aaa\bbb 4C:\Work\aaa\bbb\b1.txt 5C:\Work\aaa\bbb\ccc 6C:\Work\aaa\bbb\ccc\zzz.jfif 7C:\Work\aaa\bbb\zzz.jfif 8C:\Work\aaa\ppp.xlsx 9C:\Work\aaa\yyy 10C:\Work\aaa\yyy\xxx 11C:\Work\aaa\yyy\xxx\zzz.jfif 12C:\Work\aaa\yyy\zzz.jfif 13C:\Work\aaa\zzz 14C:\Work\aaa\zzz\ppp.xlsx 15C:\Work\aaa\zzz\z1.txt 16C:\Work\aaa\zzz.jfif
試したこと
特定の拡張子を削除するコードを記述したあとに、ファイルの存在をチェックするif文をかきました。そしてファイルが存在しなければディレクトリを削除しようとしています。
特定の拡張子のファイルは消せるのですが、空になったディレクトリが消せません。
もしや
//ファイルが存在しなければ削除
if (!(file.exists())) {
file.delete();
}
でディレクトリを削除する処理のつもりでしょうか。
file は何を指しているのか、冷静に考えてください。

回答1件
あなたの回答
tips
プレビュー