目次

jarのカレントディレクトリ

SanTaku.jarが動かない理由

SanTaku.java をアーカイブにしたSanTaku.jarはmondai.txtを見つけられなくて動かないことがあります。

mondai.txt を起動後に選択する SanTakuF.java と異なり、 SanTaku.java はカレントディレクトリ(フォルダ)にあるmondai.txtを読もうとします。

javaコマンドで実行する時はカレントディレクトリはSanTaku.javaのあるディレクトリなので同じ所にあるmondai.txtを読むことができます。しかし、jarファイルをダブルクリックする方法で起動したときは、カレントディレクトリはOSによって設定が異なります。

Linuxではユーザーホームがカレントディレクトリになるので、mondai.txtが見つからなくなります。(ユーザーホームにmondai.txtを置けば読み込んで3択問題が始まります)

Windowsではjarファイルの置かれたディレクトリがカレントディレクトリになるので、そのまま実行されます。

起動方法 Linux(Gnome)の場合 Windowsの場合
javaコマンドで起動 java実行ディレクトリ java実行ディレクトリ
jarファイルをダブルクリック ユーザーホームディレクトリ jarファイルの置かれたディレクトリ

ディレクトリの指定ができるか

問題はSanTaku.javaではmondai.txtのファイル名だけを指定しているので、カレントディレクトリが変わってしまうと読めなくなってしまうことです。ではディレクトリ指定はできるのでしょうか。

mondai.txtのある場所をプログラムの中に書くとファイルをもらった人はファイルを決められたところに置かなくてはなりません。これは不便です。またOSにより場所の指定は異なります。LINUXでは / (ルート)から始まるパスで指定しますが、Windowsでは c:\ などとドライブ名から指定が始まります。

共通に使えるのがユーザーホームとプログラムファイルの置かれたディレクトリという指定です。

表からわかるようにWindowsの場合はユーザーホームディレクトリを指定する方法を調べなければなりませんが、そうしたとしてユーザーにはmondai.txtは必ず「ユーザーホームに置いてください」などの制約がかせられます。

LINUXの場合はプログラムファイルの置かれたディレクトリを指定する方法を調べなければなりません。これなら「プログラムとmondai.txtは同じフォルダに入れてください」だけで済みそうです。

どうなっているのが便利か

使用状態を考えてみると、「プログラムとmondai.txtは同じフォルダに入れてください」でも制約なわけで、この約束を守らない場合は理由もなく起動しない(様に見える)ことになります。

どのようになっているのが便利でしょうか。

ファイルがないときにはそれを知らせる。
最小限だが解決の手がかりにはなる
ファイルがないときにはファイルを探して選択できるようにする。
より簡単に解決できる
はじめからファイルを選択するようにする
問題ファイルを複数にすることで用途が広がる
mondai.txtもjarファイルに入れてしまう。
最もすっきりするが別の問題にして使うことは困難になる。(mondai.txtが別であればこの内容を書き換えることで別の問題集ができる)
もくじ

聖愛高等学校
http://www.seiai.ed.jp/
Last Modified 2009/10/6