「SE業務」カテゴリーアーカイブ

【要注意】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を使っており、こんなものまで自分で実装しなくてはならないとは、、、早くバージョンアップしないだろうか。。。


Pythonにおける数字や文字列の論理演算

Pythonエンジニア認定基礎検定の勉強で、ネットで無料で受けられる模擬試験を受けた。
https://diver.diveintocode.jp/exam

その中でこんな問題↓があり、少し理解に苦しんだ。

orの論理演算の結果がなんで「suzuki」なんだろう・・・といろいろ調査したところ、

  • Pythonでは、数値や文字列の論理演算結果は、TrueやFalseが返されるのではなく、数値や文字列が返される
  • Pythonの論理演算では、必ずしも論理演算部分の最後まで検討されるのではなく、答えが確定すると残りの計算はせず、判断の決め手となった値を返す
  • 数値は0がFalse、0以外はTrueです。一方、文字列は空文字列(からもじれつ)はFalse、空文字列以外はTrueです

つまり、上記例題の場合、最初の”name1 or name2″の時点で、name2は空文字ではないので、Trueとが確定するので、name2のsuzukiが返されるということでした。

素人の私にとっては、使いどころがよくわからん言語仕様ですが、試験にでるので勉強がてら記事にしてみました!

 


【Python】matplotlibでウィンドウが表示されない

この本(http://glasses-se-note.com/bookrecommend5/)でscikit learnによる機械学習のチャプターで画像を8 x 8ピクセルに変換して、matplotlibで表示するサンプルプログラムがあるが、そのまま自分のPCで実行しても、変換後、ウィンドウが全然表示されない。。。

作成したPythonプログラム

参考書といくら見比べても、プログラムは間違っていないので、Python側の設定を疑った。案の定以下の手順で解消した。

1.matplotlibの設定ファイルの場所を確認する

このmatplotlibrcというファイルを開く。

2.backendの設定を変更する

backendの設定が「qt5aqq」になっているが、これは画面表示ができないもののよう。(私の環境は、Windows10)
なので、「#」で設定をコメントアウトして、「tkagg」に変更する。

これで、ウィンドウが表示された!

ちなみにこれは、scikit learnふ含まれる手書き数字のサンプルデータ。