質問: ### JavaFXのアプリから、複数ファイルを一纏めにした物を出力し、ユーザに保存させたい 初めての質問なので、質問が上手く纏まっておらず、すみません。 JavaFXのGUIアプリケーションを作成しています。 そのアプリから、複数のhtmlファイルからなる一つのWebページを出力し、ユーザの指定した場所に保存させたいと考えています。 そこで、「まずユーザに場所とディレクトリ名を決めさせ、その名前のディレクトリをその場所に作成して、更にその中にアプリ側で決めた名前のhtmlファイルを複数作成する」という方法を取ろうと考えました。 この「ユーザに場所とディレクトリ名を決めさせる」という段階で、どの様なやり方にすべきかで悩んでいます。 DirectoryChooserクラスを使ってみたのですが、これの場合ディレクトリの場所を決めさせるのみで、作成するディレクトリ名を入力させる事は出来ません。 なのでFileChooserクラスと違い、もし同じ名前のディレクトリがその場所にあった場合でも、「~は既に存在します。上書きしますか?」という確認ダイアログを出す事が出来ません。 FileChooserクラスのファイル保存ダイアログを使えば、ユーザが場所とファイル名を指定して、その場所に同名のファイルがあれば上書き確認ダイアログを出す事が出来ますよね? それと同様に、ユーザが場所とディレクトリ名を指定して、その場所に同名のディレクトリがあれば上書き確認ダイアログを出す事が出来る様な方法、それが簡単に出来るクラスはないでしょうか? もしくは、「ディレクトリを作って中に複数のhtmlファイルを作る」という考え方自体が良くないのでしょうか? もしそうなのであれば、「複数のhtmlファイルをセットにした物」を出力して保存させるのに、どの様な方法を取るべきでしょうか?
回答: > > ...ディレクトリの場所を決めさせるのみで、作成するディレクトリ名を入力させる事は出来ません。 > > > OSによって機能に差があるかも知れませんが、例えばWindowsのDirectoryChooserは左上に「新しいフォルダー」という目立たないボタンがあり、それを押すと任意の場所に任意の名前で「新しいディレクトリー」を生成することができます。 それを含めてDirectoryChooserの機能は「既存、または新規に作成したディレクトリーを返す」というものになります。 後はアプリケーションの仕様の問題になります。 (1) 指定したディレクトリーの下には一切ファイルがない状態であることを要求するのか (2) ファイルがあってもファイル名が衝突しない限り元合ったファイルは無視するか (3) ファイルがあったら無条件に消すか (1)は比較的ユーザー操作ミスが少ない方法(2),(3)になるにつれてユーザーに慎重な配慮が必要です。また(3)についていえばアプリケーション側でも「ユーザーが危険なディレクトリーを指定してしまった場合に、それを無暗に信じて大事なファイルを消さないようにする配慮」も必要になると思います。ホームディレクトリーを誤って指定された際に「その下をごっそり消してしまう」と致命的ですね・・・。 追記: UIで指定させたディレクトリーが「まだ存在しないものであること」が必要なのでしたら、そのような新しいディレクトリーを指定することができるような「ディレクトリーを指定するための特化UI」は標準機能の中にはないと思います。 こうした場合は既存のUIを組み合わせて作ることになりますが、考えられる方法としては (1) TextFieldにフルパスを直接指定させる (2) DirectoryChooserで出力ディレクトリの親ディレクトリーを指定させ、TextFieldに作成するディレクトリー名(サブディレクトリー名)を指定させる (3) (1),(2)の複合 (3)の一例ですが、 (A) TextField(サブディレクトリー名) (B) 新規作成するディレクトリーのフルパス名(最後のパスは(A)と同じになる) (C) (A)を生成する場所(既存ディレクトリー)を指定するためのDirectoryChooserを開くボタン をUIとして用意し、(A)だけ指定してデフォルトのベースディレクトリーの下にサブディレクトリー名のみ指定したり、(B)で任意のディレクトリーをフルパスで直接指定したり、(C)でサブディレクトリーを作成する場所を指定したりと、「簡便さ」と「柔軟さ」を両立したようなUIも考えられます。(例えばIntelliJ IDEAのようなIDEで新規プロジェクトを作成する場合、こんな感じになってます)