コマンドラインで指定した引数は、main() メソッドの引数(String 配列)で参照することができます。
class ArgsTest { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("[" + args[i] + "]"); } } }
C:\java>javac ArgsTest.java C:\java>java ArgsTest AAA BBB CCC [AAA] [BBB] [CCC]
メモ帳(notepad.exe)など、他のアプリケーションを起動するには exec() を用います。
import java.io.File; import java.io.IOException; class ExecTest { public static void main(String[] args) { try { Runtime.getRuntime().exec("notepad.exe"); } catch (IOException e) { e.printStackTrace(); } } }
アプリケーションの終了を待ち合わせるには waitFor() メソッドを用います。
Process proc = Runtime.getRuntime().exec("notepad.exe"); proc.waitFor();
Java でメモ帳程度の簡易的なテキストエディタを作ってみました。
複数のクラスから構成される Java プログラムをコンパイルすると、複数の *.class ファイルが作成されます。jar コマンドを用いてこれらを *.jar(Java ARchive)形式のファイルにまとめることができます。
class JarTest { public static void main(String[] args) { new JarTest2(); } } class JarTest2 { JarTest2() { System.out.println("Hello!!"); } }
これをコンパイルすると、JarTest.class と JarTest2.class ファイルが作成されます。
C:\java>javac JarTest.java C:\java>dir 2004/07/03 23:38 290 JarTest.class 2004/07/03 23:38 158 JarTest2.class
jar コマンドを用いて、これを JarTest.jar ファイルにまとめます。
C:\java>jar cvf JarTest.jar *.class マニフェストが追加されました。 JarTest.class を追加中です。(入 = 290) (出 = 219)(24% 収縮されました) JarTest2.class を追加中です。(入 = 349) (出 = 261)(25% 収縮されました) C:\java>dir 2004/07/03 23:40 1,063 JarTest.jar
JarTest.jar ファイルを実行してみますが、まだ Main-Class マニフェストをロードできないため、エラー終了してしまいます。
C:\java>java -jar JarTest.jar JarTest Failed to load Main-Class manifest attribute from JarTest.jar
JarTest.jar ファイルの中に、どんなファイルが格納されているか見てみましょう。
C:\java>jar tvf JarTest.jar 0 Sat Jul 03 23:45:32 JST 2004 META-INF/ 71 Sat Jul 03 23:45:32 JST 2004 META-INF/MANIFEST.MF 290 Sat Jul 03 23:43:26 JST 2004 JarTest.class 349 Sat Jul 03 23:43:26 JST 2004 JarTest2.class
JarTest.jar ファイルを解凍してみましょう。META-INF\MANIFEST.MF ファイルが作成されます。
C:\java>jar xvf JarTest.jar META-INF/ が作成されました。 META-INF/MANIFEST.MF が抽出されました。 JarTest.class が抽出されました。 JarTest2.class が抽出されました。
ここで、META-INF\MANIFEST.MF ファイルに次の 1行を追加します。
Manifest-Version: 1.0 Created-By: 1.4.2_04 (Sun Microsystems Inc.) Main-Class: JarTest
今度は、作成したマニフェストファイルを加えて jar ファイルにまとめます。
C:\java>jar cvfm JarTest.jar META-INF\MANIFEST.MF *.class
今度は実行可能になりました。
C:\java>java -jar JarTest.jar JarTest Hello!!
javadoc コマンドを用いて、ソースコード中に埋めたコメントを用いてリファレンスマニュアルを自動生成することができます。
/** * javadocコマンドのテスト用クラス。 * @author 杜甫々 * @version 1.0 */ public class JavaDocTest { /** * 名前 */ private String myName; /** * 名前を設定する。 * @param name 名前 */ public void setName(String name) { myName = name; } /** * 名前を返す。 * @return 名前 */ public String getName() { return myName; } }
下記のコマンドを実行することで、doc フォルダの下にリファレンスマニュアルを自動生成することができます。
C:\java>javadoc -d doc JavaDocTest.java
Java で java.lang.String や、myPackage.MyClass などのクラスを使用する場合、コンパイラは、まず、javac コマンドの -classpath オプションで指定されたフォルダから該当のパッケージやクラスを探します。
C:\java>javac -classpath C:\myJavaLib Test.java
-classpath には、フォルダ名の他、jarファイル名、zipファイル名を指定することができます。
C:\java>javac -classpath C:\myJavaLib\MyClass.jar Test.java
複数のフォルダや jarファイルを指定する場合、Windows ではセミコロン(;)、UNIX系OSではコロン(:)で区切ります。
C:\java>javac -classpath C:\dirA;C:\dirB Test.java
-classpath で見つからない場合、環境変数 CLASSPATH で指定されたフォルダや jarファイルを探します。
C:\java>set CLASSPATH=C:\myJavaLib C:\java>javac Test.java
設定した CLASSPATH 環境変数を解除する場合、次のようにします。
C:\java>set CLASSPATH=
-classpath や CLASSPATH を指定しない場合は、カレントフォルダを探します。
C:\java>dir 2004/07/03 23:38 1,290 MyClass.class
それでも見つからない場合、システム標準のクラスフォルダから、rt.jar や i18n.jar などの標準 jarファイルを探します。
C:\java>dir C:\j2sdk1.4.2_04\jre\lib\rt.jar 2004/06/27 03:29 26,465,083 rt.jar
Properties を用いて システムプロパティ を参照することができます。
import java.util.*; class PropertiesTest { public static void main(String[] args) { Properties prop = System.getProperties(); prop.list(System.out); } }
結果は次のようになります。
-- listing properties -- java.runtime.name=Java(TM) 2 Runtime Environment, Stand... sun.boot.library.path=C:\Program Files\Java\j2re1.4.2_06\bin java.vm.version=1.4.2_06-b03 java.vm.vendor=Sun Microsystems Inc. java.vendor.url=http://java.sun.com/ path.separator=; java.vm.name=Java HotSpot(TM) Client VM file.encoding.pkg=sun.io user.country=JP sun.os.patch.level=Service Pack 2 java.vm.specification.name=Java Virtual Machine Specification user.dir=C:\HomePage\java\sample java.runtime.version=1.4.2_06-b03 java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment java.endorsed.dirs=C:\Program Files\Java\j2re1.4.2_06\li... os.arch=x86 java.io.tmpdir=C:\DOCUME~1\田中\LOCALS~1\Temp\ line.separator= java.vm.specification.vendor=Sun Microsystems Inc. user.variant= os.name=Windows XP sun.java2d.fontpath= java.library.path=C:\WINDOWS\system32;.;C:\WINDOWS\syst... java.specification.name=Java Platform API Specification java.class.version=48.0 java.util.prefs.PreferencesFactory=java.util.prefs.WindowsPreferencesFac... os.version=5.1 user.home=C:\Documents and Settings\田中 user.timezone= java.awt.printerjob=sun.awt.windows.WPrinterJob file.encoding=MS932 java.specification.version=1.4 user.name=田中 java.class.path=. java.vm.specification.version=1.0 sun.arch.data.model=32 java.home=C:\Program Files\Java\j2re1.4.2_06 java.specification.vendor=Sun Microsystems Inc. user.language=ja awt.toolkit=sun.awt.windows.WToolkit java.vm.info=mixed mode java.version=1.4.2_06 java.ext.dirs=C:\Program Files\Java\j2re1.4.2_06\li... sun.boot.class.path=C:\Program Files\Java\j2re1.4.2_06\li... java.vendor=Sun Microsystems Inc. file.separator=\ java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport... sun.cpu.endian=little sun.io.unicode.encoding=UnicodeLittle sun.cpu.isalist=pentium i486 i386