Java

JDK8 の Files クラスを少しだけ触ってみる。

Java

今回は JDK8 で新たに Files クラスに追加された便利な機能について少しだけ触ってみる。

と言っても元ネタは海外のサイトのもので英語が読めない私は手探りで触っています。

早速 NetBeans を使ってプロジェクトを創ってみました。

プロジェクトのファイル構造は下図のようになります。

1

プログラムのコードは次のようになってます。

2

出力ウィンドウの実行結果から解るようにちゃんとフィルタリングされたディレクトリ及びファイルが表示されています。

public static Stream<Path> list(Path dir) throws IOException

この新しく追加されたメソッドが便利ですね。

では、次に指定したパスからたどれるディレクトリとファイルを全て表示させてみましょう。

3

全て表示されてます。

public static Stream<Path> walk(Path start, FileVisitOption… options) throws IOException

が頑張ってくれました。(^_^)

public static Path walkFileTree(Path start, FileVisitor<? super Path> visitor) throws IOException

より扱いやすいような気がします。(気がするだけか、 StreamAPI 使った方がこれからは楽かも?)

さて、それではさらに拡張子が java のファイルだけを表示させるようにしてみましょう。

4

単純に filter メソッドの引数の条件に最後の文字(拡張子)が .java のものだけを加えただけです。

便利ですね!

ついでにファイルの中身を表示させてみるプログラムも!

5

インデントなどの整形処理はなくなってますがちゃんと表示されてます。

public static Stream<String> lines(Path path) throws IOException

が全てのラインを読み込んでくれます。

実際にはファイルの読み込みにはこのようなことはせずに BufferedReader.lines() を使うだろうと思います。

いずれにしろ JDK8 で華々しくデビューする StreamAPI は強力だということですね。(^_^)

Hatena タグ:

Java 8 での算術オーバーフロー

Java

Java 8 では算術オーバーフローを検出可能となるよっておはなしです。

Math クラスに算術オーバーフローを検出できるメソッドが追加されました。

ちょっとしたサンプルプログラムをのせておきます。

実行結果は次の通りになります。

-2147483648
2147483647
java.lang.ArithmeticException: integer overflow
at java.lang.Math.addExact(Math.java:790)
at jp.yucchi.exact.Exact.main(Exact.java:14)
java.lang.ArithmeticException: integer overflow
at java.lang.Math.subtractExact(Math.java:829)
at jp.yucchi.exact.Exact.main(Exact.java:20)

この他にも Java 8 で追加された便利なものがありますので興味のある方は API ドキュメントに目を通してみるといいですよ!

Hatena タグ:

Stream API の復習

Java

来年の3月18日に Java 8 がリリースされるとあってこのところ日本語での情報もたくさんネット上に出回ってきました。

以前、「JDK8 Lambda その他いろいろ なんでもいいから動かしてみる」シリーズ、「もっと Lambda」シリーズのエントリーで適当に遊んでました。

少し API の変更などあって動かなくなってしまったサンプルもあります。

そこで Java Advent Calendar 2013 のエントリーで復習にぴったりの記事を見つけたので写経させていただくことにしました。

メッセージに「ラムダについて、○ん○出して考えてみた!」とあってビックリしました。

最初「ラムダについて、うんこ出して考えてみた!」と連想してしまい、なんだ!この人はと驚きました。

少ししてから「ラムダについて、ほんき出して考えてみた!」だよなって別解がでました。

まぁ、わざわざ伏せているところをみると作者の罠にまんまとはまったと思う。

ちなみに、○ん○出して考えてみた!というサイトは下記です。

ラムダ禁止について本気出して考えてみた – 9つのパターンで見るStream API

とてもいいですね。

ただ禁止度があるのですがこれはこのサイトの著者が独断で考慮して決められているようです。

プロフェッショナルプログラマの判断なのでおそらくこれに準ずるような企業が多くなるのでしょうかね。

私個人としては、女性と API は新しい方が良い!と言う人間なので

「8. stream中に元のオブジェクトを操作」 以外は使ってもいいんじゃない?

というよりは使いこなせるようになりたい!

Java Advent Calendar 2013 では時期が時期だけに Java 8 に関するエントリーがちらほらとみられます。

どのエントリーも非常に興味深いものばかりです。

それでは自分用のφ(..)メモメモ

おっと、まんま写経しても面白くないので解りやすく変更を加えてコーディングしました。

プログラムの解説はないので興味のあるかたはご自分でお調べくださいませ。

なお、プログラム中に出てくる人物やデータは実際の人物の正確なデータではありませんのであしからず。(なんのこっちゃ

実行結果は次のようになります。

<– MyFriends 全員表示 –>
柴田 恭平, 62歳, Gender: MALE, Breast Size: 90, Waist Size: 75, Hips Size: 80
小栗 旬, 30歳, Gender: MALE, Breast Size: 85, Waist Size: 68, Hips Size: 77
市原 隼人, 26歳, Gender: MALE, Breast Size: 88, Waist Size: 65, Hips Size: 76
壇 蜜, 33歳, Gender: FEMALE, Breast Size: 85, Waist Size: 60, Hips Size: 89
北川 景子, 27歳, Gender: FEMALE, Breast Size: 75, Waist Size: 54, Hips Size: 81
綾瀬 はるか, 28歳, Gender: FEMALE, Breast Size: 88, Waist Size: 61, Hips Size: 91
佐々木 希, 25歳, Gender: FEMALE, Breast Size: 80, Waist Size: 58, Hips Size: 82
剛力 彩芽, 21歳, Gender: FEMALE, Breast Size: 77, Waist Size: 58, Hips Size: 84
堀北 真希, 25歳, Gender: FEMALE, Breast Size: 78, Waist Size: 58, Hips Size: 83
武井 咲, 19歳, Gender: FEMALE, Breast Size: 76, Waist Size: 58, Hips Size: 82
深田 恭子, 31歳, Gender: FEMALE, Breast Size: 86, Waist Size: 62, Hips Size: 88
はるな 愛, 37歳, Gender: OKAMA, Breast Size: 90, Waist Size: 60, Hips Size: 89
マツコ・デラックス, 41歳, Gender: OKAMA, Breast Size: 150, Waist Size: 150, Hips Size: 150

<– 性別をキーにした Map を作りバストが 85 より大きい友達の人数を入れる –>
{FEMALE=2, MALE=2, OKAMA=2}

<– 性別をキーにした Map を作りバストが 85 より大きい友達の人数を入れる。(別パターン) –>
{MALE=2, FEMALE=2, OKAMA=2}

<– 性別が女性のバストの個数(ここでは友達の人数)、合計、最小値、平均値、最大値を取得。 –>
count: 8
sum: 645
min: 75
avarage: 80.625
max: 88

<– 女性だけをフィルタリングしてバストのサイズによって降順ソート。 –>
綾瀬 はるか: Breast: 88
深田 恭子: Breast: 86
壇 蜜: Breast: 85
佐々木 希: Breast: 80
堀北 真希: Breast: 78
剛力 彩芽: Breast: 77
武井 咲: Breast: 76
北川 景子: Breast: 75

<– 女性でバストが 80 より大きい友達だけをフィルタリングしてバストの値に 1000 を足して合計する。 –>
3259

<– 性別によってグルーピングして年齢の若い順に表示させる。 –>
MALE
市原 隼人 : 26
小栗 旬 : 30
柴田 恭平 : 62
FEMALE
武井 咲 : 19
剛力 彩芽 : 21
佐々木 希 : 25
堀北 真希 : 25
北川 景子 : 27
綾瀬 はるか : 28
深田 恭子 : 31
壇 蜜 : 33
OKAMA
はるな 愛 : 37
マツコ・デラックス : 41

<– 女性のバストの大きさでグルーピングして年齢の若い順に表示させる。 –>
< 貧乳 >
北川 景子 : 27 Breast: 75
< 巨乳>
綾瀬 はるか : 28 Breast: 88
深田 恭子 : 31 Breast: 86
< 乳 >
武井 咲 : 19 Breast: 76
剛力 彩芽 : 21 Breast: 77
佐々木 希 : 25 Breast: 80
堀北 真希 : 25 Breast: 78
壇 蜜 : 33 Breast: 85

<– 性別による平均年齢を計算。 –>
FEMALE : 26.125
MALE : 39.333333333333336
OKAMA : 39.0

<– 性別によるグルーピングをして人数の少ない順にソートする。 –>
OKAMA
MALE
FEMALE

<– 性別によるグルーピングをして人数の少ない順にソートする。人数も表示させる。 –>
OKAMA : 2
MALE : 3
FEMALE : 8

Hatena タグ:

Java Web Start (English by Machine translation)

Java

How to make Java Web Start.

use the sample app ControlsFX.

ControlsFX is an external library of great JavaFX8.

ControlsFX 

Of them, as long as it was downloaded and extracted the file
Library body controlsfx-8.0.2-developer-preview-1.jar
Sample application controlsfx-8.0.2-developer-preview-1-samples.jar
I use  these.

Signature does not seem to be jar files of these two.

You will sign the jar files of these two.

Create a signature file are implanted the following command to start the command prompt.

keytool -genkey –alias javafx -keystore keystore –storepass password –keypass password_2 -validity 3650

Please do not forget your password and alias name keystore.key The resulting file is required to sign the jar file.

Update the manifest file before you sign.

I will update as the following manifest file of controlsfx-8.0.2-developer-preview-1-samples.jar.

Manifest-Version: 1.0
Main-Class: org.controlsfx.HelloControlsFX
Class-Path: controlsfx-8.0.2-developer-preview-1.jar

We will now update our controlsfx-8.0.2-developer-preview-1-samples.jar to make the MANIFEST.MF file as described above.

jar uvmf MANIFEST.MF controlsfx-8.0.2-developer-preview-1-samples.jar

You can use the keystore file that you just created update the manifest file of controlsfx-8.0.2-developer-preview-1-samples.jar When you have finished
I put a sign controlsfx-8.0.2-developer-preview-1.jar and controlsfx-8.0.2-developer-preview-1-samples.jar.

jarsigner -keystore keystore controlsfx-8.0.2-developer-preview-1-samples.jar javafx

Enter the password you will be asked to enter password.

I put a sign the controlsfx-8.0.2-developer-preview-1.jar as well.

jarsigner -keystore keystore controlsfx-8.0.2-developer-preview-1.jar javafx

I enter here will also be prompted for a password of course.

Sign the jar file is now complete.

The next step is to create a JNLP file.

controlsfx-8.0.2-developer-preview-1-samples.jnlp

<?xml version=”1.0″ encoding=”utf-8″?>
<jnlp codebase=”http://yucchi.jp/java/java_web_start/HOGE/” spec=”1.0″ xmlns:jfx=”http://javafx.com” href=”controlsfx-8.0.2-developer-preview-1-samples.jnlp”>
  <information>
    <title>HelloControlsFX</title>
    <vendor>Hoge</vendor>
    <description>null</description>
    <offline-allowed/>
  </information>
  <resources>
    <jfx:javafx-runtime version=”2.2+” href=”http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp”/>
  </resources>
  <resources>
    <j2se version=”1.6+” href=”http://java.sun.com/products/autodl/j2se”/>
    <jar href=”controlsfx-8.0.2-developer-preview-1-samples.jar” size=”200919″ download=”eager” />
    <jar href=”controlsfx-8.0.2-developer-preview-1.jar” size=”455114″ download=”eager” />
  </resources>
<security>
  <all-permissions/>
</security>
  <applet-desc  width=”800″ height=”600″ main-class=”com.javafx.main.NoJavaFXFallback”  name=”HelloControlsFX” >
    <param name=”requiredFXVersion” value=”8.0+”/>
  </applet-desc>
  <jfx:javafx-desc  width=”800″ height=”600″ main-class=”org.controlsfx.HelloControlsFX”  name=”HelloControlsFX” />
  <update check=”always”/>
</jnlp>

The codebase = “http://yucchi.jp/java/java_web_start/HOGE/” of the JNLP file for the above-mentioned
controlsfx-8.0.2-developer-preview-1-samples.jar
controlsfx-8.0.2-developer-preview-1.jar
controlsfx-8.0.2-developer-preview-1-samples.jnlp
It is ready to be swelling the link as below with the deployment.

<a href=”http://yucchi.jp/java/java_web_start/HOGE/controlsfx-8.0.2-developer-preview-1-samples.jnlp”>

However, you will need a web server of your supports the JNLP file.

to mine.types
application / x-java-jnlp-file jnlp
Please add it if it does not bet.

Webstart: click to launch this app as webstart (Java 8 実行環境必須)

Hatena タグ:

Java Web Start

Java

ちょっと前に英語が苦手な(出来ない)私が相手の要求に上手く応えることができなかった。

今でもその人が何を望んでいるのかちょっとよく解らない。

たぶん Java Web Start のことかな?って思うので今回のエントリーはそれを取り上げてみることにした。

今回は外部ライブラリを使う JavaFX アプリケーションをサンプルにします。

既にサンプルアプリとして公開されているものを使わさせていただきます。

JavaFX の外部ライブラリとして凄く良くできている ControlsFX です!

ControlsFX 

このファイルをダウンロードして解凍した中の

ライブラリ本体 controlsfx-8.0.2-developer-preview-1.jar

サンプルアプリ controlsfx-8.0.2-developer-preview-1-samples.jar

を使います。

現時点ではこれら二つの jar ファイルは署名されてないので心苦しいのですが勝手に署名を入れさせていただきます。

今回は Java Web Start の作り方なので署名ファイルは簡易的なオレオレ署名を作ります。

コマンドプロンプトを起動して下記コマンドを打ち込み署名ファイルを作成します。

keytool -genkey –alias javafx -keystore keystore –storepass password –keypass password_2 -validity 3650

できあがった keystore.key ファイルは jar ファイルに署名するのに必要なのでエイリアス名とパスワードは忘れないようにしてください。

署名をする前にマニフェストファイルを更新します。

controlsfx-8.0.2-developer-preview-1-samples.jar のマニフェストファイルを下記のように更新します。

Manifest-Version: 1.0
Main-Class: org.controlsfx.HelloControlsFX
Class-Path: controlsfx-8.0.2-developer-preview-1.jar

上記のような MANIFEST.MF ファイルを作って controlsfx-8.0.2-developer-preview-1-samples.jar を更新するのが一番楽かな。

jar uvmf MANIFEST.MF controlsfx-8.0.2-developer-preview-1-samples.jar

controlsfx-8.0.2-developer-preview-1-samples.jar のマニフェストファイルの更新が終わったら先ほど作った keystore ファイルを使用して

controlsfx-8.0.2-developer-preview-1-samples.jar と controlsfx-8.0.2-developer-preview-1.jar に署名を入れます。

jarsigner -keystore keystore controlsfx-8.0.2-developer-preview-1-samples.jar javafx

パスワードの入力を求められますのでパスワードを入力します。

同様に controlsfx-8.0.2-developer-preview-1.jar にも署名を入れます。

jarsigner -keystore keystore controlsfx-8.0.2-developer-preview-1.jar javafx

こちらも当然パスワードを要求されますので入力します。

これで jar ファイルへの署名は完了です。

次は JNLP ファイルを作成します。

controlsfx-8.0.2-developer-preview-1-samples.jnlp

<?xml version=”1.0″ encoding=”utf-8″?>
<jnlp codebase=”http://yucchi.jp/java/java_web_start/HOGE/” spec=”1.0″ xmlns:jfx=”http://javafx.com” href=”controlsfx-8.0.2-developer-preview-1-samples.jnlp”>
  <information>
    <title>HelloControlsFX</title>
    <vendor>Hoge</vendor>
    <description>null</description>
    <offline-allowed/>
  </information>
  <resources>
    <jfx:javafx-runtime version=”2.2+” href=”http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp”/>
  </resources>
  <resources>
    <j2se version=”1.6+” href=”http://java.sun.com/products/autodl/j2se”/>
    <jar href=”controlsfx-8.0.2-developer-preview-1-samples.jar” size=”200919″ download=”eager” />
    <jar href=”controlsfx-8.0.2-developer-preview-1.jar” size=”455114″ download=”eager” />
  </resources>
<security>
  <all-permissions/>
</security>
  <applet-desc  width=”800″ height=”600″ main-class=”com.javafx.main.NoJavaFXFallback”  name=”HelloControlsFX” >
    <param name=”requiredFXVersion” value=”8.0+”/>
  </applet-desc>
  <jfx:javafx-desc  width=”800″ height=”600″ main-class=”org.controlsfx.HelloControlsFX”  name=”HelloControlsFX” />
  <update check=”always”/>
</jnlp>

上記の JNLP ファイルの codebase=”http://yucchi.jp/java/java_web_start/HOGE/” に

controlsfx-8.0.2-developer-preview-1-samples.jar

controlsfx-8.0.2-developer-preview-1.jar

controlsfx-8.0.2-developer-preview-1-samples.jnlp

を配備して下記のようにリンクをはればできあがりです。

<a href=”http://yucchi.jp/java/java_web_start/HOGE/controlsfx-8.0.2-developer-preview-1-samples.jnlp”>

ただし、あなたのサーバーが JNLP ファイルをサポートしている必要があります。

mine.types に

application/x-java-jnlp-file  jnlp

と無ければ追加してください。

Webstart: click to launch this app as webstart (Java 8 実行環境必須)

Hatena タグ:


« 古い記事 新しい記事 »