質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1536閲覧

javaでディレクトリの中身を表示していきたい

tamintya

総合スコア34

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/10/16 13:55

編集2021/10/17 02:16

前提・実現したいこと

ディレクトリを1つ指定してその中身を表示していきたい。この時ディレクトリの中にディレクトリがある場合その中身も表示していきたいので、ディレクトリかファイルかを判断したいのですがその判定が必ずfalseになってしまいます。

実行結果

「かく」と「確認2」はディレクトリです。

かく 確認2 落書き.txt -------------- かく 確認2 落書き.txt かくはファイルです 確認2はファイルです 落書き.txtはファイルです

該当のソースコード

java

1import java.io.File; 2import java.nio.file.Files; 3 4public class FileTest { 5 6 //ディレクトリかどうか判別しディレクトリならtrueを返す 7 public boolean checkdir(File name){ 8 if(name.isDirectory()){ 9 System.out.println(name +"はディレクトリです"); 10 return name.isDirectory(); 11 }else{ 12 System.out.println(name + "はファイルです"); 13 return name.isDirectory(); 14 } 15 } 16 17 public static void main(String[] args){ 18 FileTest file = new FileTest(); 19 File dir = new File("確認"); 20 //文字列として取得 21 String[] dirlist = dir.list(); 22 //File オブジェクトとして取得 23 File[] dirFilelist = dir.listFiles(); 24 //取得した文字列データを画面出力 25 for(int i = 0;i< dirlist.length;i++){ 26 System.out.println(dirlist[i]); 27 } 28 System.out.println("--------------"); 29 //取得したFileオブジェクトデータを画面出力 30 for(int i =0;i < dirlist.length;i++){ 31 System.out.println(dirFilelist[i].getName()); 32 } 33 34 //checkdirを実行しディレクトリだった場合tmpに保存 35 String[][] tmp = new String[100][]; 36 for(int i = 0;i< dirlist.length;i++){ 37 File dire = new File(dirlist[i]); 38 boolean check = file.checkdir(dire); 39 if(check){ 40 tmp[i] = dirlist; 41 } 42 } 43 } 44}

追記
###実行結果
「かく」と「確認2」はディレクトリです。

かく 確認2 落書き.txt -------------- かく 確認2 落書き.txt dire =かく getAbsolutePath =C:\Users\src\main\java\かく かくはファイルです dire =確認2 getAbsolutePath =C:\Users\src\main\java\確認2 確認2はファイルです dire =落書き.txt getAbsolutePath =C:\Users\src\main\java\落書き.txt 落書き.txtはファイルです

###ソースコード
以下の文を追加しました

//checkdirを実行しディレクトリだった場合tmpに保存 String[][] tmp = new String[100][]; for(int i = 0;i< dirlist.length;i++){ File dire = new File(dirlist[i]); //追加 System.out.println(""); System.out.println("dire =" + dire); System.out.println("getAbsolutePath =" + dire.getAbsolutePath()); boolean check = file.checkdir(dire); if(check){ tmp[i] = dirlist; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2021/10/16 14:03 編集

実行してみてはいませんが、恐らく dire は目的のファイルを指していないでしょう。 dire が指すファイルが存在するか、や、dire のプルパスを表示してみては如何でしょうか。
tamintya

2021/10/17 02:09

回答ありがとうございます。 表示させてみたのですが目的のファイルを指しているように思うのですが・・・
jimbe

2021/10/17 04:59

「かく」や「確認2」「落書き.txt」は「確認」ディレクトリの下にあるのではないでしょうか?
tamintya

2021/10/17 05:29 編集

「確認」ディレクトリの中に入っているのですが、なぜ表示されないのでしょうか?
tamintya

2021/10/17 05:40

listFileで確認したところ確かに「確認」ディレクトリの中にありました。
guest

回答2

0

ベストアンサー

File オブジェクトが何を起点にしているかと言えば、カレントフォルダです。
C:\Users\src\main\java フォルダ内でこのプログラムを実行した場合、

File dir = new File("確認");

によって dir は C:\Users\src\main\java\確認 フォルダを指すため、

String[] dirlist = dir.list();

によって

dirlist[0] = "かく"
dirlist[1] = "確認2"
dirlist[2] = "落書き.txt"

となり、そのように表示されています。

その後、

for(int i = 0;i< dirlist.length;i++){
File dire = new File(dirlist[i]);

との部分では、dirlist の各要素から File オブジェクトを作成しています。
dirlist の中身は上記のようになっていますから、
ループ毎の dire 変数の中身は

i=0 の時: new File("かく")
i=1 の時: new File("確認2")
i=2 の時: new File("落書き.txt")

と同じ意味となり、先の "確認" フォルダの指定の時と同じように起点はカレントフォルダですのでフルパスを表示すると

new File("かく") → C:\Users\src\main\java\かく
new File("確認2") → C:\Users\src\main\java\確認2
new File("落書き.txt") → C:\Users\src\main\java\落書き.txt

となります。

File オブジェクトの isDirectory メソッドは、存在しないファイルの場合は false を返します。 File.isDirectory

そもそも、わざわざ dirlist から再度 File オブジェクトを作成せずとも

File[] dirFilelist = dir.listFiles();

によって"確認"フォルダ下の各ファイルの File オブジェクトを取得出来ているのですから、それを利用すれば良いでしょう。

投稿2021/10/17 08:33

編集2021/10/17 08:38
jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamintya

2021/10/18 14:38

詳しい説明ありがとうございます。理解することができました。 複雑に考えすぎていたのでlistFilesを使ってチャレンジしたいと思います。
guest

0

戦法を変えて、Files#walk()してみては?

$ jshell jshell> import java.nio.* jshell> import java.nio.file.* jshell> Files.walk(Paths.get("dir")) .forEach(f -> System.out.println(String.format("%s is %s", f, Files.isDirectory(f) ? "dir" : "not dir")))

投稿2021/10/16 14:19

編集2021/10/16 14:57
shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamintya

2021/10/17 02:28

回答ありがとうございます。 調べてみてもよく分からなかったのですが、上記のコードを実行するとdirしか表示されないのですがどこと書き換えればよいのでしょうか。
shiketa

2021/10/17 06:38 編集

> 上記のコードを実行するとdirしか表示されないのですが ぢゃ、そもそもぜんぶがディレクトリなんぢゃないですか。 > どこと書き換えればよいのでしょうか。 いいえ。そのまんまでディレクトリとファイルを作ってやってみました。 ``` $ mkdir dir $ cd dir $ mkdir かく 確認2 $ touch 落書き.txt $ jshell ... dir is dir dir/落書き.txt is not dir dir/かく is dir dir/確認2 is dir ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問