JAVA関連のことを調べてみた2020年04月06日

JAVA関連のことを調べてみた2020年04月06日

CUIとGUIの違い

##CUIとは
Character User Interface(キャラクターユーザーインターフェース)の略。

文字だけで操作するアプリケーション。
コマンドプロンプト等で見られる。対話式の処理。
最近はあまり使われない。

###ex

コマントプロンプトで ver で Enter おすと、新しい行にうつる。

##GUIとは
Graphical User Interface(グラフィカルユーザーインターフェース)の略。

ボタンや入力欄が表示されて、マウスやタッチで操作する入力方式。
普段見ているパソコンの表示もGUI。

元記事を表示

javaが動く手順について

##javaが動く仕組み

1.プログラムを記述
2.javaコンパイラがプログラムを変換
3.Java用ファイルが作られる
4.java仮想マシンがファイルを読み取る
5.プログラムとして動作する

2〜5を自動でしてくれる。

元記事を表示

[Logback]ローテーション時に不要ファイルが消えない時の対処方法

Logbackのローテーション設定の妥当性を検証していた時に、不要ファイル(=保存切れとなったアーカイブファイル)が消えなくて「なぜだ〜」となった時に調べた時のメモ。

> **NOTE:**
>
> 検証時は、デバッグログを1つだけ出力するmainメソッドを作って、システム日付をずれして実行していました。

# バージョン

* Logback 1.2.3

# なぜ不要ファイルが消えなかったのか!?

細かい条件は調べていませんが、実行時間が短命なスタンドアロンアプリ(=ログ出力後にすぐにプロセスが終了するようなアプリ)の場合、ログファイルのローテーション後に行われるはずの不要ファイル(=保存切れとなったアーカイブファイル)削除処理が行われる前のJVMが終了してしまうことがあるようです。

# どうすればよい?

アプリ起動時に不要ファイル(=保存切れとなったアーカイブファイル)を消す処理を呼び出すためのオプションを有効化しておくことで、次回の実行タイミングで不要なファイルを削除することができます。

“`xml:起動時に不要ファイルを削除する処理を実行する際の設定例

元記事を表示

【Java】StreamAPIでズンドコキヨシ

# はじめに

少し前に流行った「ズンドコキヨシ」を久しぶりに[こちらの記事](https://qiita.com/Okocchi/items/6477bdc63eee4787cd58)で見つけたので、私もJavaを使ってズンドコキヨシを作ってみることにしました。
ついでにfor文を封印して、StreamAPIの復習をしてみました。

# 作成したコード

* 「ズン」もしくは「ドコ」のいずれかを格納した長さ5のListを作ります。
* `Stream.generate()`を使う場合、Streamが無限に続かないように`limit`を付ける必要があります。
* Listを半角スペースでJoinした結果が「ズン ズン ズン ズン ドコ」になるまで、`do~while`のループを繰り返します。
* 必ず1回はループに入るので、最初に終了条件を判定する`while`ではなく、最後に終了条件を判定する`do~while`を使いました。
* 最後に「キヨシ!!」を付け足して標準出力します。

“`java:ZundokoStream.java
package zundoko;

impo

元記事を表示

Bluetooth PC-PC/Android-PC間通信(RFCOMM)

BluetoothのプロトコルRFCOMM([RFCOMM ‐ 通信用語の基礎知識](https://www.wdic.org/w/WDIC/RFCOMM))での通信を試した。

– クライアント-サーバ
– PC-PC
– Android-PC

## PC-PC間 通信
– サーバ
– Ubuntu 18.04
– Python 3.7.4
– クライアント
– Windows 10
– Python 3.6.8

### 導入(Ubuntu)
“`shell
sudo apt install libbluetooth-dev
pip3 install pybluez
“`

### 導入(Windows)
“`
# ref: https://github.com/pybluez/pybluez/issues/279
pip3 install PyBluez-win10
“`

### ペアリング
ペアリングはOSのUIを使って手動で行った。

Ubuntu:Settings>Bluetooth
Windows:設定>デバイス>Bluetoo

元記事を表示

ScalaはJVM上で動くんだよ

## JREとJDK
JREは(Java Runtime Environment) で実行環境
JDKは(Java Development kit) で開発ツール
のことである。
scalaではJDKを使用する。

コンパイル済みのプログラムを実行するだけであればJREでOK
プログラムをコンパイルする必要があるのならJDKが必要となる
JDKはJREも同梱するのでscalaではJDKをインストールすれば問題ない。

## コマンドの種類
JavaコマンドはJavaアプリケーションを起動するコマンド
Javacコマンドはjavaソースコードをコンパイルするためのコマンド

## scalaがJVM上で動くメリット
・OSの差異などに左右されずポータルな実行プログラムである。

・java標準ライブラリをはじめ、既存のjavaモジュールを呼び出すことができる。
今まで蓄積されたjavaのナレッジの恩恵を受けることができる

・実行時パフォーマンスがある程度高速である。

## JVM上で動くデメリット
メリットがあれば当然デメリットがあるというもの
・サーバアプリケーションなどの常時稼働

元記事を表示

【Java】 Stream(filter, map, forEach, reduce)

# 概要
「streamで書いて!」と言われてメリットがわからなかったのでまとめる。

# わかったこと
– streamめっちゃ便利。
– for文やif文のネストが減って見やすい。
– リストのインスタンス化をしなくてもよくて良い。
– .addとかも書かなくて良いから、コード量が減って良い。

# filter : 条件の絞り込み

“`
List tanakaList =
list.stream
.filter(item -> item.getName.equals(“田中”))
.collect(Collectors.toList());
“`

##### <解説>
– 「list」をstreamで分解する。
– 「item」の中に「list」から要素を一つずつ取得して入れる。
– `filter`で名前が”田中”のオブジェクトだけに絞り込む。
– 分解していたstreamを集めて、collectでリストに変換する。
– 戻り値「tanakaList」にセットする。

##### <使って良かっ

元記事を表示

Java Gold SE8 に合格したお話

###はじめに
***
やっとこさ「Oracle Certified Java Programmer, Gold SE 8」を取得できました。
結果としては正答率87%でした。(65%以上で合格) 受ける前不安でしたが案外やれましたね…。

Javaの資格取るメリットとか、実際の試験に関する所感など書いていきます。

###Java Gold SE8 ってなんぞや?
***
Oracleが認定するJavaプログラマの資格です。Bronze、Silver、Goldと3つあり
難易度は[Bronze < Silver < Gold] となっています。
受験料は税込みで3万ペリカくらいします。 これじゃ地上に出られない!!
あとGoldには取得条件があり、事前にSilverの資格を取得していることが必要条件となります。

ちなみにSE8っていうのはJavaのバージョンのことを指しています。

###Goldをの資格を取得する(学習する)メリット
***
Javaのクラスやメソッドの具体的な使い方等を網羅している感じですね。
あと、「Stream API」<

EclipseでSpring pom.xmlでMaven構成問題

##開発環境
– Windows 10
– Eclipse Version: Oxygen.3a Release (4.7.3a)

##事象
>STSで新規作成したばかりのSpring Bootプロジェクトで、pom.xmlの1行目がエラーになる。
>![Maven構成問題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431046/1e745991-bfdf-a9c1-a355-08fdf5a17955.png)
>Eclipseは「pleiades-2019-03-java-win-64bit-jre_20190508」を使用。

>##原因
>maven-jar-pluginの現時点での最新版3.1.2のバグ?

>##対処
>[npmrepository](https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin)で確認すると3.1.2が最新。
>![Mavenバージョン管理.png](https:

lombokでデフォルトコンストラクタが無くてNoSuchMethodException

凡ミスの記録。

lombokを使用して以下のコードを実行したところ、実行時エラーになった。

“`java
@Data
@AllArgsConstructor
public class Person {

“`

“`java
Caused by: java.lang.InstantiationException: kagamihoge.springbatchsample.Person
at java.base/java.lang.Class.newInstance(Class.java:571) ~[na:na]
at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.getBean(BeanWrapperFieldSetMapper.java:248) ~[spring-batch-infrastructure-4.2.1.RELEASE.jar:4.2.1.RELEASE]
… 53 common frames omitted
Caused by: java.la

Spring Boot 2 Filter内でSessionScopeBeanをDIする

# 前置き
最近Spring BootでWeb開発をしています。直接HttpSessionを利用する方法ではなく、できるだけ@SessionScopeでセッションを管理したいと思っています。Filter内で@SeesionScope Beanを参照する方法を調査しました。

# 構成
| 名前 | バージョン |
| ————- | ——————————– |
| macOS | Catalina 10.15.4 |
| IntelliJ IDEA | 2019.3.4 (Community Edition) |
| Java | “11.0.2” 2019-01-15 |
| Spring Boot | 2.2.6 |
| Kotlin | 1.3.71

ずんどこプログラム

“`ruby:filename.rb
package zundokoProgram;

import java.util.Random;

public class Zundoco_random {
public static void main(String[] args) {
Random random = new Random();
String[] zun_doko = { “ずん “, “どこ ” };
String zundoko = new String();

while (!(zundoko.equals(“ずん ずん ずん ずん どこ “))) {
zundoko = “”;
for (int i = 0; i < 5; i++) { String s = zun_doko[random.nextInt(2)]; // 変数sにランダムで選ばれた配列sh[0,1]のどちらか1文字が入る zundoko = zundoko.concat(s); // 変数scに変数sをくっつける } S

Javaでsuperメソッドを呼び出す

##はじめに
簡単なことからコツコツとjavaのアウトプットをします。
javaシルバーに合格することを目標に勉強中。

##superとは
スーパークラスのインスタンスや変数を参照する際に使用する。

##superを用いての親クラスメソッドの呼び出し方
super.メソッド名

##書いてみる
“`Main.java

//スーパークラス
class hoge {
public void print() {
System.out.println(“hello from スーパークラス”);
}
}

//子クラス
class huga extends hoge {
public void print() {
System.out.println(“hello from 子クラス”);
}

public void executePrint() {
//子クラスのprint
print();

//スーパークラスのprint
super.print();
}
}

public class Main {
public static void

javaで複数の例外をまとめてcatchする

javaで、複数の例外についてcatchして同じようにログ出力して上に投げるよいう処理をよく見ますが、
冗長で共通化したいなと思っていたので調べてみたらどうやらできるみたいです。[参考](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/language/catch-multiple.html)

“`java
catch (IOException ex) {
logger.log(ex);
throw ex;
} catch (SQLException ex) {
logger.log(ex);
throw ex;
}
“`

`|`で区切ってあげると下記のような書き方で共通化できます。
少し注意なのが、java7以降でしか使えないようですので、昔のバージョンで開発してる方はご注意ください。

“`java
catch (IOException | SQLException ex) {
logger.log(ex);
throw ex;
}
“`

パッケージ分けされたJavaのコードをコマンドで実行する

調べてもなかなか出てこなかったのでメモ。

# 実行コマンド

“`
$ javac -d /path/to/build/dir/ /path/to/javafiles
$ java -cp /path/to/classfiles/ main.Main
“`
# 例

こんな階層だったとします。

“`
.
└── src
├── app
│   └── App.java
└── hoge
├── Hoge.java
└── fuga
└── Fuga.java
“`

## コンパイル

全部コンパイルします。-d で生成ファイルの出力先のディレクトリを指定します。

“`
$ javac -d build src/*/*.java src/*/*/*.java
“`

こうなります。

“`
.
├── build
│   ├── app
│   │   └── App.class
│   └── hoge
│   ├── Hoge.class
│   └── fuga

flywayのflyway.configFileプロパティが消えてた。

DBのマイグレーションにflywayを使用しています。

flywayのバージョンを変更して、いつものようにコマンドを実行すると、エラーが出るようになりました。
実行できていたはずのコマンドがエラーになり困っていましたが、一先ず解決したので共有します。

原因:バージョンが変わったことでflyway.configFileが使用できなくなった。

エラーが発生した時のバージョンは以下です。
・Apache Maven 3.6.0
・flyway-maven-plugin 6.0.8 (4.1.0から変更)

“`console:エラー例
$ mvn -Dflyway.configFile=src/main/resources/application-local.yml flyway:info
[INFO] Scanning for projects…
[INFO]
[INFO] ————–< jp.co.hoge.hoge.app:hoge-hoge-app >—————
[INFO] Building hoge-hoge-app 0.1.0

「The Language Support for Java server crashed 5 times in the last 3 minutes. The server will not be restarted.」エラーで振り回された話

「The Language Support for Java server crashed 5 times in the last 3 minutes. The server will not be restarted.」
このエラーに振り回されたので、備忘録として残そうと思います。

自分メモなので適当

#始まり
Docker使ってJavaの環境を整えたいな…

せや、この記事参考にやってみよう!

![スクリーンショット 2020-04-03 20.38.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293066/4b4a5fd0-5482-1c86-0201-f0109302667b.png)

はい???できないんですがそれは。

#調べたら出てきた事
わからんのでエラー内容コピペで検索
これが出てきた。
http://wiki.tk2kpdn.com/language-suppo

Azure WebAppsへのwarデプロイ(maven)

#目的
GitActionsがプレビュー版となったため、mavenビルドをgitに行ってもらい、WebAppsにデプロイする

## 1:アプリ準備
まずは、Maven + TomcatのJavaアプリケーションを作成する

mavenは以下のように記述した

“` 1.8
1.8
1.8
DeployTest
MavenJsptest


javax.servlet
java

Docker 上で入門する Apache Hadoop

# はじめに
はじめての並列分散処理のフレームワークとして Apache Beam を利用しているのですが、この辺りの学習をするにあたっては MapReduce などの従来からの用語や概念も頻繁に登場します。そのため、Apache Hadoop に入門してみました。今回は、環境をできるだけ楽に構築できるように Docker を利用しています。

![1600px-Hadoop_logo_new.svg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244338/c15942bc-5683-6db4-27b6-f41c298e5358.png)

# Hadoop 概要
Hadoop は、大容量のデータを処理するための**分散処理のフレームワーク**です。通常は **Linux** 上で動作させます。スケールアウトに優れているため、処理するデータ量が増えたとしても、**サーバーの台数を追加することで性能を向上させることができます。**

Hadoop は、主に次の2つのシステムで構成されます。

– **

Javaでファイルのハッシュ値を返却するサンプルプログラム

javaでファイルのハッシュ値を返却するサンプルプログラムです。

“`java:SampleMain.java
package test;

public class SampleMain {

public static void main(String[] args) {
System.out.println(SampleHash
.getfileHash(“glassfish-5.0.1.zip”, SampleHash.SHA_512));
}
}
“`

“`java:SampleHash.java
package test;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.DigestInputStream;
import java.security.Messag