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

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

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

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

Q&A

解決済

3回答

2782閲覧

[JAVA] path.listFiles().length がnullになる原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2022/04/20 04:05

提示コードのFileControl.javaGetFilePath_Directory関数の File file[] = new File[path.listFiles().length];で以下のエラーが発生するのですがこれはなぜでしょうか?原因がわかりません。ファイルパスは読み込まれています。

Exception in thread "main" java.lang.NullPointerException at FileManager.GetFilePath_Directory(FileManager.java:23) at Main.main(Main.java:29)
Main.java

java

1import java.io.IOException; 2import java.io.File; 3 4import javax.imageio.ImageIO; 5 6import java.awt.image.BufferedImage; 7 8import java.util.concurrent.Callable; 9import java.util.Scanner; 10 11import java.util.ArrayList; 12import java.util.Collection; 13import java.util.List; 14 15 16import org.apache.pdfbox.pdmodel.PDDocument; 17import org.apache.pdfbox.pdmodel.PDPage; 18import org.apache.pdfbox.pdmodel.PDPageContentStream; 19import org.apache.pdfbox.pdmodel.common.PDRectangle; 20import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; 21 22public class Main 23{ 24 public static void main(String args[]) 25 { 26 Scanner scanner = new Scanner(System.in); 27 String fileName = scanner.nextLine(); 28 29 List<Image> image = FileManager.GetFilePath_Directory(new File(fileName)); 30 Generater gen = new Generater(); 31 gen.setFile(image); 32 33 gen.run(); 34 35 36 scanner.close(); 37 } 38}
FileControl.java

java

1import java.io.File; 2import java.io.File; 3import java.util.ArrayList; 4import java.util.Arrays; 5import java.util.Collection; 6 7import java.util.List; 8 9public class FileManager 10{ 11 //ファイルタイプ 12 public enum type 13 { 14 Directory, //ディレクトリ 15 File, //単一の画像ファイル 16 Invalid //対応していないファイル 17 } 18 19 static List<Image> GetFilePath_Directory(File path) 20 { 21 System.out.println(path.toPath()); 22 23 File file[] = new File[path.listFiles().length]; 24 file = path.listFiles(); 25 List<String> fileList = new ArrayList<String>(); 26 27 28 for(int i = 0; i < file.length; i++) 29 { 30 fileList.add(file[i].toString()); 31 } 32 33 Arrays.sort(fileList.toArray()); 34 35 List<Image> image = new ArrayList<Image>(); 36 37 38 for(int i = 0; i < fileList.size(); i++) 39 { 40 System.out.println(fileList.get(i)); 41 image.add(Image.GetImage(new File(fileList.get(i)).toPath())); 42 } 43 44 45 return image; 46 47 } 48 49 50 51 //ファイルかディレクトリかを選別 52 public static type GetFileType(File file) 53 { 54 if(file.exists() == true) 55 { 56 if(file.isFile() == true) 57 { 58 String extension = file.getName().substring(file.getName().lastIndexOf(".")); 59 60 if(extension.equals(".png") || extension.equals(".jpg") || extension.equals(".jpeg")) 61 { 62 return type.File; 63 } 64 } 65 else 66 { 67 return type.Directory; 68 } 69 } 70 else 71 { 72 System.out.println("対応形式ではりません: " + file.getName()); 73 return type.Invalid; 74 } 75 76 return type.Invalid; 77 } 78} 79

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

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

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

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

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

m.ts10806

2022/04/20 04:36

>ファイルパスは読み込まれています 第三者が判断できる確固たる根拠の提示を
guest

回答3

0

「どこがNullか」はデバッグモードでステップ実行で追えばすぐわかるでしょう(タイトルが何を根拠にされたのか言及されてないのでわかりませんが)

そもそも基礎である変数定義の仕方がおかしい。
File file[]

こうでは?

Java

1File[] file = new File[path.listFiles().length];

むしろ変数定義して、また格納して、と二度手間されてるようなので直でいい気がします。

Java

1File[] file = path.listFiles();

投稿2022/04/20 04:26

編集2022/04/20 04:28
m.ts10806

総合スコア80850

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

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

dodox86

2022/04/20 04:45

> そもそも基礎である変数定義の仕方がおかしい。 > File file[] Javaでは一般的、多くの場合で「型[] 変数名;」のように配列を宣言しますが、変数名の後で[]をつけるのも文法的には有りですね。 https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html > The [] may appear as part of the type at the beginning of the declaration, or as part of the declarator for a particular variable, or both. 「一般的ではない」と言う意のご指摘では同意します。
m.ts10806

2022/04/20 04:45

あぁ、原因だけ知りたいのか。 やりすぎた。
m.ts10806

2022/04/20 04:47

補足ありがとうございます。 この質問者のこれまでからあえてそういう変数名にしているとは到底思えないので、指摘しました。 new File[]としてるので変数の型は明らかに間違いですね。
guest

0

ベストアンサー

resource/kairakuten ファイルパスをその.jarファイルからの相対パスに直接記述したから動きました。
結論
ファイルパスに` が入力されていた。

投稿2022/04/20 04:49

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

m.ts10806

2022/04/20 04:54 編集

自身の思い込みを正とする思考をなんとかしないといけないのでは? 初めからそうですよね。 「〜は問題ない」が本当に問題なかった試しがない。まずは自分を疑う癖をつけてください。
dodox86

2022/04/20 04:58

「resource/kairakuten」なんてPATH名は提示のコード、文章中にまったく出てこないので、関連も不明で回答自体ほとんど無意味です。
guest

0

File#listFiles()null を返すことがあります。リファレンスを読んで対処しましょう。

投稿2022/04/20 04:34

int32_t

総合スコア20872

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

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

退会済みユーザー

退会済みユーザー

2022/04/20 04:43

リファレンスを見たのですが`この抽象パス名が示すディレクトリ内のファイルおよびディレクトリを示す抽象パス名の配列。配列は、ディレクトリが空の場合は空になる。この抽象パス名がディレクトリを示さない場合、または入出力エラーが発生した場合は null を返す。`とありますがディレクトリの中には確かにファイルが存在しているのですがこれはなぜでしょうか?
m.ts10806

2022/04/20 04:49

自身の思い込みを排除しないと永遠に理解はできないかと。
int32_t

2022/04/20 04:50

この path が本当に読めるディレクトリを示しているかどうか質問者さん以外には判断できません。自分で調べるか他人が判断できるような情報を出しましょう。 情報を出すとしたら、 * エラーが出る直前の System.out.println(path.toPath()); の出力 * その出力のパスをコマンドラインで 「ls -ld パス」をした結果 など。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問