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

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

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

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

Q&A

解決済

1回答

376閲覧

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

r201670110mr

総合スコア17

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

0グッド

0クリップ

投稿2017/11/11 05:49

編集2017/11/11 11:03

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

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

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

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

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

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

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 06:09

編集2017/11/11 07:17
KSwordOfHaste

総合スコア18392

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

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

r201670110mr

2017/11/11 07:01

DirectoryChooserの「新しいフォルダー」ボタンというのはつまり、単にディレクトリ選択ダイアログ内で、ディレクトリを作る操作も可能である(右クリックで新規作成⇒フォルダーと同じ)というだけという事ですよね? つまり結局は、ユーザにDirectoryChooserで出力させたい場所のみを指定させて、後はその場所にhtmlファイルを全部順に出力させるしかないという事でしょうか? やりたい事はあくまで、「htmlファイルが複数入った新しいディレクトリを、そのディレクトリの場所と名前を指定させて作成する」という事なのですが… ダイアログの中でディレクトリを新規作成する事も出来れば良いのではなく、ダイアログの中で指定した場所に、ダイアログの中で指定した名前のディレクトリを作成する方法はないでしょうか?
KSwordOfHaste

2017/11/11 07:17 編集

回答の方へ追記しました。
r201670110mr

2017/11/11 07:40

作るしかないんですね… ファイルを新規作成する為のダイアログはあるのに、ディレクトリを新規作成する為のダイアログがライブラリに無いのは、何だか不思議です。 ユーザにディレクトリを作成させたい場合って、普通はないんでしょうか…
KSwordOfHaste

2017/11/11 07:54 編集

DirectoryChooserは結局のところOSの標準的なディレクトリー指定用の機能への移譲で実装されているようなので、OSにそういうダイアログがないということなんだろうと思います。「ディレクトリーを指定させる」場合は「既存のディレクトリーを指定する」動作を期待するのでしょうね。 例えばWindowsならアプリケーションごとに新規のディレクトリーを作るUIがまちまちなのはつまりOSに標準で備わってないからということなのだと思います。
KSwordOfHaste

2017/11/11 07:56

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

2017/11/12 15:03

一から作るのは大変なので、以下の様にして妥協する事にしました。 ・ディレクトリ名の入力をTextInputDialogで行わせる。  入力されたディレクトリ名が、「0文字」または「半角英数字以外が入っている」場合は、ダイアログを再表示し続ける。 ・DirectoryChooserでディレクトリ作成場所を選ばせる。 ・選択された場所に、入力された名前のディレクトリが既にあるかチェック。  同名ディレクトリがある場合は、ディレクトリ名の後ろに「_2」を付け、再度チェックする。  それでも同名ディレクトリがあれば、「_3」を付け再度チェック。  ~と、同名ディレクトリが無くなるまで名前を変える。 ・ディレクトリ作成。その中にHTMLファイル作成。 ディレクトリ名が被らなくなる様、ディレクトリ名の後ろに勝手に数字を付け足す事にしたので、上書きの心配は無くなった筈です。 ディレクトリ名を半角英数字に限定しているのは、このフォルダごとサーバにアップする場合に、URLに使えない文字が入らない様にする為です。 ディレクトリ名の後ろに付ける文字が「(2)」「(3)」……でなく「_2」「_3」……なのも同様の理由で、URLに丸括弧が使えない為です。
r201670110mr

2017/11/12 15:05

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問