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

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

【Java】HttpCliientでコンテンツ取得

#HTTPでコンテンツ取得
* **HttpClientクラス**(Java11以降)
* HTTP2対応
* 非同期処理
* WebSocket通信(軽量)
* モジュール(パッケージの束)
* HttpClientクラスは`java.net.http`モジュールに属する
* 現プロジェクトからモジュールへのアクセスを有効化するため/src配下に以下記述

“`java:module-info.java
module selflearn{
requires java.net.http;
}
“`

* **HttpClientオブジェクト生成**
* **newHttpClientメソッド**でインスタンス生成
* **newBuilderメソッドで動作パラメータ設定**
* 認証コード(authenticator)、接続タイムアウト時間(connectTimeout)、バージョン指定(version)など
* `var client = HttpClient.newBuilder()
.versi

元記事を表示

【Java】ファイルシステム操作

#ファイルシステム操作
* Filesクラス
* getPathメソッドでPathオブジェクトを生成
* FileSystems.getDefaultメソッドで現在のファイルシステム取得

“`java
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;

public class Main {
public static void main(String[] args) {
try {
//現在のファイルシステム取得
var fs = FileSystems.getDefault();
var path1 = fs.getPath(“./sample.txt”);
//ファイル存在確認
System.out.println(Files.exists(path1)); //tru

元記事を表示

【Java】数学演算のまとめ

#数学演算
##基本演算
* Mathクラス
* 全機能がクラスメソッド化されている
* Mathクラスのインスタンス化は不要(できない)

“`java
public class Main {
public static void main(String[] args) {
//絶対値,最大,最小
System.out.println(Math.abs(-100)); //100
System.out.println(Math.max(6, 3)); //6
System.out.println(Math.min(6, 3)); //3
//切り上げ
System.out.println(Math.ceil(1234.56)); //1235.0
//切り捨て
System.out.println(Math.floor(1234.56)); //1234.0
//四捨五入
System.out.println(Math.round(1234.56)); //1235
//平

元記事を表示

MyBatis で 自動裁判されたキーを取得する際にハマった話

MySQLのAUTO_INCREMENTで自動裁判されたID(主キー)をオブジェクトにセットしようとしたら、1がセットされてしまった。

ドメインクラス

“`java:Hoge.java

@Data
@NoArgsConstructor
public class Hoge{
private Integer id;
private String message;
}
“`

サービスクラス

“`java:HogeService.java
public class HogeService{

@Autowired
private HogeMapper hogeMapper;

public addHoge(){

Hoge hoge = new Hoge();
hoge.setMessage(“Hello”);

hoge.setId(hogeMapper.insert());

System.out.println(hoge.getId());/

元記事を表示

logbackのログがWebアプリ停止時に出力されない問題に対する対処方法について

先日・・・Webアプリケーション停止時にログが出力されないという事象に遭遇しました 😥
その原因と解決方法をメモっておこうかと思います。

# アプリケーションの構成要素

本事象が発生したアプリケーションの構成要素(ざっくりな構成要素)は以下の通りです。

* Tomcat (warデプロイ)
* Spring Framework(Spring MVC) ※諸事情により「Spring Boot」は使ってない・・・
* Logback

# なぜログが出力されなかったのか?

Webアプリケーション停止時に行う処理(破棄処理)にて、「Logbackのログ出力機能を停止する処理」が一番最初に呼び出されていることが原因でした。

ざっくりいうと以下のような流れで処理が実行されていました。

* サーブレットコンテナの停止開始
* Logbackのログ出力機能の停止
* Springのアプリケーションコンテキストの破棄処理 → **ここで出力しているログが出ない・・・**
* サーブレットコンテナの停止完了

# 誰がLogbackのログ出力機能を停止しているのか?

Logbac

元記事を表示

Javaで湯婆婆を実装してみる

##はじめに
この記事は僕が電車の中で思いついたものを元にした**ネタ投稿**です。
何か技術を書き記したものではありませんのでご容赦ください。
それから、この記事は映画「千と千尋の神隠し」のネタバレになる可能性があります。
「大丈夫!」って人だけ下に進んでください。

##コード

“`java:Yubaba.java
import java.util.Scanner;
import java.util.Random;

public class Yubaba {
public static void main(String[] arts){
System.out.println(“契約書だよ。そこに名前を書きな。”);

Scanner keiyakusho = new Scanner(System.in);
String name = keiyakusho.nextLine();

System.out.println(“フン。”+name +”というのかい。贅沢な名だねぇ。”);

Random random = new Random();

元記事を表示

【Java】Fileクラスの使い方

#プログラミング勉強日記
2020年11月1日
前回はMathクラスを扱ったが、今回はFileクラスの使い方を簡単に説明する。

#Fileクラスとは
 Javaでファイルを扱うために使うクラス。Fileはファイルまたはディレクトリを表すクラスで、ファイルの読み書きやフォルダの中のファイルの一覧取得といったファイルシステム全般で使用する。

#書き方
 取り扱いたいファイルに対して1つのFileクラスのオブジェクトを対応させる。作成したFileクラスのfileオブジェクトを使って、ファイルの内容を読み込んだり書き込んだりすることができる。なので、Fileクラスを使うことでローカルにあるファイルをJavaで扱える。

“`java:基本的な書き方
File オブジェクト名 = new File(ファイル名);

// 具体例
File file = new File(“c:\\test\\test.txt”);
“`
 具体例でも示しているのように、ファイル名を指定するときは`c:\test\test.txt`ではなく`c:\\test\\test.txt`のように`\`を2つ

【Java】プログラムの実行時間の計測方法

Javaで処理時間を計測するにはミリ秒で計測するcurrentTimeMillisメソッドと、ナノ秒で計測するnanoTimeメソッドがあります。
今回はナノ秒で計測し、秒で出力する方法です。

“`java
double start = System.nanoTime();

//計測したい処理を記述

double end = System.nanoTime();
System.out.println(“処理時間:” + ((end – start) / Math.pow(10, 9)) + “s”);
“`

Azure App Service for Java の Configuration は System.getEnv() で取得する

Azure Web App のサービスで Javaベースのアプリを実行する際、Settings – Configuration から Application settings として Name – Value の組み合わせで値を保存することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110265/2ec8c815-4e88-a4ff-1769-62133fa66d91.png)

この値をアプリから取得するには System.getEnv() を利用する。

“`java
String serviceName = System.getenv(“KEY_NAME”);
“`

システムプロパティではなくて環境変数としてセットされるのがポイント。

以上です。

【Java】ストリーム処理

#ストリームとは
* データの流れ
* **入出力先にかかわらずデータの連なりとして同じように操作することができる**
* 入力(受け取り)/ 出力(書き出し)ストリーム
* 文字ストリーム / バイナリストリーム

|基本クラス|入力ストリーム|出力ストリーム|
|:-:|:-:|:-:|
|文字ストリーム|Reader|Writer|
|バイナリストリーム|InputStream|OutputStream|

* 基本クラスをもとに操作対象に応じ操作クラスを提供している

#ファイル書き込み
* **ファイルオープン**
* **BufferedWriterクラス**のnewBufferedWriterメソッドを使う(Bufferは文字列データを一時的に保存するメモリ領域)
* 引数に`StandardOpenOption.APPEND`指定で追記モード

* **ファイル出力**
* **writeメソッド**
* データをBufferに保存して溜まったらまとめてファイル出力
* **newLineメソッド**で改行区切り

【Java】日付/時刻の操作

#日付/時刻の操作
* **Date-Time-API**を使おう(Java8以降)

#現在時間取得
* **LocalDate**は日時
* **LocalTime**は時間

“`java
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZonedDateTime;

public class Main {
//現在日時・時刻を取得
public static void main(String[] args) {
System.out.println(LocalDateTime.now()); //2020-10-31T07:49:16.502455881
System.out.println(OffsetDateTime.now()); //2020-10-31T07:49:16.503291965Z
System.o

GoogleマップをWebページに表示する(Spring Boot + Thymeleaf)

#概要
Spring Bootの学習をしていて、Google MapをWebページに表示したいなという事でMaps JavaScript APIを使用してみました。
今回はThymeleafのフラグメントを使用して、ホーム画面にGoogle Map表示します。
htmlファイルにjavascript、cssも埋め込んでしまえば公式のサンプルソースで一瞬だったのですが、
それぞれ別ファイルで読込しつつ、フラグメントも使用するとどこで読込すれば良いのかが分からずつまずきました。(というかjavascriptは結局html埋込にしました。。)
※GCPの設定方法は省略しています。

#環境
– macOS Catalina
– Version: 10.15.7
– Eclipse IDE for Enterprise Java Developers.
– Version: 2020-03 (4.15.0)
– STSプラグイン
– Spring Boot 2.2.6
– Java8
– Maven

#参考サイト
– [Google Cloud Platform公式サ

Visual Studio CodeでPlantUMLを利用する方法(2020/10/30作成)

2020年10月30日まででVisualStudioCodeでPlantUMLを利用する方法をメモとして挙げておきます。
この方の記事をもとに作成しました。(https://qiita.com/couzie/items/9dedb834c5aff09ea7b2)

手順は以下の通りです。
環境導入
1.Visual Studio Code のインストール
2.Javaのインストール
3.Graphvisのインストール
4.PlantUMLのインストール

動作確認
1.ファイル作成とプレビュー表示
2.画像ファイル出力

各エラーの対処法

参考情報

#環境導入
### 1. Visual Studio Codeのインストール

 ※すでにVisual Studio Codeをインストールしている場合この作業は必要ありません。

 1.Visual Studio Code (https://code.visualstudio.com/) を開く
 2.[Download for Windows] を押してインストーラーをダウンロードする
 3.インストローラーを実行する

###2

JavaFXを使ってGUIを作ろうとした際の備忘録

##記事を書いた目的
プログラム初心者の自分が JavaでGUIを作ろうと思い立ったはいいものの
環境構築からまっさらなウインドウを表示させるまでに5、6時間かかってしまったので
今後他のOS、PCで設定するときに困らないようにメモとして残しておきたいためです。

##環境
macOS Mojave(10.14.6)
JavaSE-11
Eclipse 2020

##環境構築スタート

###1.Eclipseのインストール
基本的に下記のサイト様を参考にインストール、設定を行いました。

EclipseでJava開発環境を作る(Mac編)


ワークスペースのディレクトリについては、よく分からなかったのでデフォルトのまま作成。

###2.e(fx)clipse、Scene Builderのインストール、設定
これに関しては下記のサイト様を参考にしました。

【Java入門】GUIの開発フレームワークまとめ(Swing、JavaFx、AWT)


(Scene Builderの起動時に特に文字化けは起こらなかった。)

SceneBuilder 実行可能ファイルについてはmacのため
/A

Apache POI の使い方

今日はPOIの使い方について簡単に説明していこうと思います

詳細は下記の公式サイトを参照ください
[Apache POI ](https://poi.apache.org/)

#ワークブックを作成する
まずは作業対象となるワークブックを作成します
一つ注意点があるのですが、既存のファイルを読み込む場合は先にFileInputStreamを生成しておく必要があります
書き込みの場合は書き込みたい時にFileOutputStreamを生成すれば大丈夫です

“`java
//書き込みの場合
Workbook workbook = new XSSFWorkbook();//xlsx、xlsmファイルの場合

//いろいろな処理

//出力先の生成
String filePath = “エクセルファイル.xlsx”
tyr(FileOutputStream output = new FileOutputStream(filePash)){
//書き込み
workbook.write(output);
}

【Java】Mathクラスの使い方

#プログラミング勉強日記
2020年10月31日
数値を扱うMathクラスの主なメソッドとそれぞれの使い方を簡単にまとめる。

#Mathクラスとは
 平方根や指数関数、対数関数などを使用できる数値処理を実行するためのメソッドがまとめられたクラス。Mathクラスはjava.langパッケージにあるので、インポートをする必要がない。
 下記でMathクラスの主要関数の使い方をまとめる。

#absメソッド
 absメソッドは絶対値を求めるメソッド。

“`:基本的な書き方
絶対値 = Math.abs(対象の数値);
“`
 ここで引数はint型、double型、float型、long型の数値を1つ入れることができる。(戻り値は同じ引数の型)

#maxメソッドとminメソッド
 値の大小を求めるためのメソッドで、数値を比較してより大きい値を求めるときにはmaxメソッドを、より小さい値を求めるときにはminメソッドを使用する。

“`:基本的な書き方
大きい値 = Math.max(比較する値, 比較する別の値);
小さい値 = Math.min(比較する値, 比較する別の値);

【初心者】Javaの基礎的な”配列”の記述

#javaの配列の書き方

Java初心者です。学んだことを記述していきます。

###1.配列  
一個ずつ丁寧に配列を作ったやり方

“`

String[] memo = new String[5];    //5個分の配列をmemo変数に代入

memo[0] = “だいこん” ;    
memo[1] = “にんじん” ;
memo[2] = “さば” ;
memo[3] = “レモン” ;
memo[4] = “からし” ;

String fruits = memo[3] ;    //memo[3]の配列をfruitsに代入  
System.out.println( fruits );

(コンソール実行結果)

レモン
“`
#####上記の省略した書き方
“`
String[] memo = {“だいこん”,”にんじん”,”さば”,”レモン”,”からし”};

String fruits = memo[0] ;   
System.out.println( fruits )
“`

###2.二次元配

【Java】正規表現のまとめ

# 一覧
| パターン | マッチ文字列 |
|:-:|:-:|
|XYZ|XYZという文字列|
|[XYZ]|XYZいずれか一文字|
|[^XYZ]|XYZ以外の一文字|
|[X-Z]|X~Yの範囲で一文字|
|[a-zA-Z]|aからz、またはA~Zの範囲|
|(X|Y|Z)|XYZのいずれか
[ABC|]|
|X*|Xが0回以上発生
(“do*n”の場合”dn”,”don”,”dooon”など)|
|X+|Xが1回以上発生
(“do+n”の場合”don”,”dooon”など)|
|X?|Xが0または1回発生
(“do?n”の場合”dn”か”don”)|
|X{n}|Xがn回発生
(“do{2}n”の場合”doon”)|
|X{n,}|Xがn回以上発生
(“do{2,}n”の場合”doon”,”doooon”など)|
|X{n,m}|Xがn~m回発生
(“do{2,3}n”の場合”doon”か”dooon”)|
|.|任意の文字|
|\w|大文字/小文字の英数字、アンダースコア
[a-zA-Z_0-9]|

SQL SELECT文を覚えよう 初心者向け

データベースからデータを取得する際にSELECT文を覚えていないと、
思ったように取得出来ずに時間が経過した経験の持ち主です。

SELECT文では、
・特定のレコードを取得
・〇〇円以上の商品データのみ取得
・あるテキストデータ(例:Tシャツ)が含まれているデータのみ取得
等々覚える必要があることがわかります。

それではSELECT文を学習した内容をアウトプットしていきます。

前提

テーブル box

カラム id name message price time

で登録されていることを前提例で進めていきます。

テーブルから特定のカラムを取得

※テーブルboxからnameのみ取得する場合

“`php:sql

SELECT name FROM box;


②どのカラムを取得したいの?(SELECT name) ①どのテーブルの?(FROM box;)

“`

データベースには複数のテーブルがありますので、
テーブル(box)を指定してあげた上でカラム(name)を指定する必要があります。

例えば、

“`php:sq

replace()メソッドの使い方(Javaシルバー)

# replaceメソッド

**文字列を置換する**

replaceメソッドは対象の文字列から第1引数で指定した文字列を検索し、マッチした文字列を第2引数で指定した文字列で置換する。そして、置換後の文字列を戻り値として返す。文字列の置換は先頭から始まり、文字列の最後まで行われる。

簡単に言うと**第一引数で指定した文字列を第二引数で指定した文字列に置換**する。

Stringクラスのメソッド
java.lang.String.replace()

## 使い方

“`java
対象の文字列.replace(置換される文字列, 置換文字列)
“`

“`java
public static void main(String[] args) {

// 対象の文字列
String strBefore = “Hello world!”;

// 置換される文字列”Hello” を 置換文字列”Goodbye”に置換
String strAfter = strBefore.replace(“Hello”, “Goodbye”);