fork download
  1. /*
  2. 課題で求められているDirListとDirWriterの分担の詳細が分からなかったので
  3. DirListが条件を読み込んだ後DirWriterに条件を渡して仕事を任せ
  4. DirWriterがディレクトリツリーの探索とファイルへの書き込みを行っている
  5. ファイルリストは実行例での表示順が大文字小文字無視の並べ替え後のようなので
  6. Arrays.sort()でそうなるように並べ替えている
  7. 不要ならsortを通さずにそのままdirlistをfor文に使えばよい
  8. */
  9.  
  10. import java.io.*;
  11. import java.util.*;
  12.  
  13. public class DirList {
  14. public static void main(String[] args) throws FileNotFoundException {
  15. Scanner sc = new Scanner(System.in);
  16. System.out.print("一覧を生成するディレクトリ名: ");
  17. String dir = sc.nextLine();
  18. System.out.print("出力ファイル名: ");
  19. String out = sc.nextLine();
  20. try (DirWriter dw = new DirWriter(out)) {
  21. dw.list(dir);
  22. }
  23. sc.close();
  24. }
  25. }
  26.  
  27. class DirWriter implements AutoCloseable {
  28. private PrintWriter writer;
  29.  
  30. public DirWriter(String fileName) throws FileNotFoundException {
  31. writer = new PrintWriter(fileName);
  32. }
  33.  
  34. public void close() {
  35. writer.close();
  36. }
  37.  
  38. public void list(String fileName) throws FileNotFoundException {
  39. File f = new File(fileName);
  40. if (f.isDirectory()) {
  41. list(f);
  42. } else if (f.exists()) {
  43. writer.println(fileName);
  44. } else {
  45. throw new FileNotFoundException(fileName);
  46. }
  47. }
  48.  
  49. private void list(File dir) {
  50. Queue<File> que = new LinkedList<>();
  51. writer.println("Directory: " + dir.getName());
  52. File[] dirlist = dir.listFiles();
  53. Arrays.sort(dirlist, new Comparator<File>() {
  54. public int compare(File o1, File o2) {
  55. return o1.getName().compareToIgnoreCase(o2.getName());
  56. }
  57. });
  58. for (File f : dirlist) {
  59. writer.print(f.getName());
  60. if (f.isDirectory()) {
  61. writer.print(" はディレクトリです。");
  62. que.add(f);
  63. }
  64. writer.println();
  65. }
  66. while (! que.isEmpty()) list(que.remove());
  67. }
  68. }
  69.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty