「Java」タグアーカイブ

【要注意】JavaのFileクラスでrenameToメソッドによるファイル移動

Javaでファイル操作をするときの一番基本的なクラスであるFileクラスには、File操作のためのメソッドが数多く用意されています。
https://docs.oracle.com/javase/jp/8/docs/api/java/io/File.html

その中に、renameToというファイル移動(パスの変更)を行うためのメソッドがあります。

しかし、このrenameToというメソッドを使うには注意が必要です。APIリファレンスはこのように書かれています。

「ファイルシステム間で移動できないことがある」とさらっと書いてありますが、私はこれを見落としており、renameToの戻り値がfalseになってしまいました。Linuxでいうところのパーティションをまたがっていたり、AIXのファイルシステムをまたぐ場合のファイル移動はこのメソッドを使うことはできません。

同じく、APIリファレンスに書いてありますが、Filesクラスにはプラットフォームに依存しないmoveメソッドがあります。が、これはJava 7以降のことなので、Java 6はこんな感じでファイルをコピーして、削除する処理を自作しないといけないです。

今の現場が未だにJava 6を使っており、こんなものまで自分で実装しなくてはならないとは、、、早くバージョンアップしないだろうか。。。


JavaプログラムのHTTP/HTTPS通信でプロキシを経由させる

IBMのWatson APIをいろいろ試してみたくて、職場のPCでJavaから呼び出しみたが、以下のようなエラーがでてしまった。。。

(うすうす感づいてはいたが。。。)自宅のPCでおなじJavaを動かすとなんの問題もなく動いた。(ちなみに、試したのはDocument Conversionというサービス)

つまり、職場のネットワークからだとつながらないということがわかり、職場はプロキシサーバがあるので、プロキシサーバを通すように以下のJVMのシステムパラメータを設定して動かしたところうまくいった!!

パラメータ 内容
http.proxyHost プロキシサーバのホスト名(HTTP)
http.proxyPort プロキシサーバのポート番号(HTTP)
https.proxyHost  プロキシサーバのホスト名(HTTPS)
https.proxyPort プロキシサーバのポート番号(HTTP)
http.nonProxyHosts プロキシを省略して、直接到達するホストのリスト。各ホストを “|” で区切ることで複数指定可能。

プロキシの指定の方法は2つある。

方法1:ソースコードで指定する


Javaソースの中で直接指定します。

●サンプル

方法2:起動パラメータで指定する


Javaの起動パラメータで直接指定します。

 ●サンプル

もちろん、Eclipseのプロジェクトの”右クリックメニュー” → “実行” > “実行の構成を開く” > “引数タブ” > “VM引数”で指定してもOK。

 


JavaをバージョンアップしたらJMeterが動かなくなった

ある日、これまで問題無く動いていたJMeterがちゃんと動かなくなっていましたので、その時の対処のメモです。

 Javaを8にアップデートしたらJMeterの起動時にコンソールに↓のエラーが出ました。

Java HotSpot(TM) Client VM warning: ignoring option PermSize=64m; support was removed in 8.0
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=64m; support was removed in 8.0

JMeter2

エラーメッセージから明らかですが、Java8から「PermSize」「MaxPermSize」のJVMパラメータが無くなっためのようです。

 また、これまでちゃんと動いていたテストシナリオもSSL関連のエラーが出るようになってしまいました。

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

JMeter3

 結局、使っているJMeter(今回は2.9)とJava8との相性の問題で、一次的に環境変数PATHをJava7に変更して起動しなおしたら問題なく動きました。

また、JMeterの方を最新(今時点で2.13)にしてJava8で動かしても特にエラーはありませんでした。

しかし、JMeterをバージョンアップするとこれまで作ったJMeterのテスト計画を検証し直すor作り直す必要があるので、今回はJavaを一時的に7に戻しました。(;^_^A