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

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

ただいまの
回答率

87.48%

JavaFXのアプリから、複数ファイルを一纏めにした物を出力し、ユーザに保存させたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,181

score 17

JavaFXのアプリから、複数ファイルを一纏めにした物を出力し、ユーザに保存させたい

初めての質問なので、質問が上手く纏まっておらず、すみません。

JavaFXのGUIアプリケーションを作成しています。
そのアプリから、複数のhtmlファイルからなる一つのWebページを出力し、ユーザの指定した場所に保存させたいと考えています。

そこで、「まずユーザに場所とディレクトリ名を決めさせ、その名前のディレクトリをその場所に作成して、更にその中にアプリ側で決めた名前のhtmlファイルを複数作成する」という方法を取ろうと考えました。
この「ユーザに場所とディレクトリ名を決めさせる」という段階で、どの様なやり方にすべきかで悩んでいます。

DirectoryChooserクラスを使ってみたのですが、これの場合ディレクトリの場所を決めさせるのみで、作成するディレクトリ名を入力させる事は出来ません。
なのでFileChooserクラスと違い、もし同じ名前のディレクトリがその場所にあった場合でも、「~は既に存在します。上書きしますか?」という確認ダイアログを出す事が出来ません。

FileChooserクラスのファイル保存ダイアログを使えば、ユーザが場所とファイル名を指定して、その場所に同名のファイルがあれば上書き確認ダイアログを出す事が出来ますよね?
それと同様に、ユーザが場所とディレクトリ名を指定して、その場所に同名のディレクトリがあれば上書き確認ダイアログを出す事が出来る様な方法、それが簡単に出来るクラスはないでしょうか?

もしくは、「ディレクトリを作って中に複数のhtmlファイルを作る」という考え方自体が良くないのでしょうか?
もしそうなのであれば、「複数のhtmlファイルをセットにした物」を出力して保存させるのに、どの様な方法を取るべきでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

...ディレクトリの場所を決めさせるのみで、作成するディレクトリ名を入力させる事は出来ません。

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で新規プロジェクトを作成する場合、こんな感じになってます)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/11 16:56

    ちょっと語弊がありました。「新規に作りたいなら標準ダイアログの中で生成できる方が都合が良いという考え方」というべきだと思います。

    キャンセル

  • 2017/11/13 00:03

    一から作るのは大変なので、以下の様にして妥協する事にしました。

    ・ディレクトリ名の入力をTextInputDialogで行わせる。
     入力されたディレクトリ名が、「0文字」または「半角英数字以外が入っている」場合は、ダイアログを再表示し続ける。
    ・DirectoryChooserでディレクトリ作成場所を選ばせる。
    ・選択された場所に、入力された名前のディレクトリが既にあるかチェック。
     同名ディレクトリがある場合は、ディレクトリ名の後ろに「_2」を付け、再度チェックする。
     それでも同名ディレクトリがあれば、「_3」を付け再度チェック。
     ~と、同名ディレクトリが無くなるまで名前を変える。
    ・ディレクトリ作成。その中にHTMLファイル作成。

    ディレクトリ名が被らなくなる様、ディレクトリ名の後ろに勝手に数字を付け足す事にしたので、上書きの心配は無くなった筈です。

    ディレクトリ名を半角英数字に限定しているのは、このフォルダごとサーバにアップする場合に、URLに使えない文字が入らない様にする為です。
    ディレクトリ名の後ろに付ける文字が「(2)」「(3)」……でなく「_2」「_3」……なのも同様の理由で、URLに丸括弧が使えない為です。

    キャンセル

  • 2017/11/13 00:05

    完全に期待した仕様通りとは言えないですが、一応目的の事は出来る様になりました。
    有難う御座いました。

    キャンセル

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

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る