JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

スッキリわかるJava入門

# はじめに
他言語の開発経験を数年経て次にJavaについて習うレベルの人向け(筆者がそうであるため)
かなり端折ったりはするけれどなるべく大切な部分は要約してまとめる

# 第一部 ようこそJavaの世界へ
Javaは以下の点がある
– プログラミングの学びやすく標準的な基本文法
– 大規模開発を支援するオブジェクト指向に対応
– 豊富に準備された便利な命令群
– 多様なコンピュータで同じように動作する汎用性

“`java:文章の表示
System.out.println(“Hello world”);
“`

“`java:計算
System.out.println(31 + 31);
“`

“`java:変数
int x;
x = 6;
“`

## 第1章 プログラムの書き方

ソースコードの波括弧{…}で囲まれた部分をブロック(block)と呼ぶ
外側のブロックは、クラスブロック(class block)
内側のブロックは、メソッドブロック(method block)
2つのブロックの二重構造を持っている

コンピュータに対する指示・命令はメソッドブロック

元記事を表示

JPA Thymeleaf でstatus=500エラーが出た時にエラー解消した備忘録

**書籍**
Spring解体新書第2版
6章実施中

**環境**
・Windows10
・STS
・Spring boot
・Tymeleafテンプレートエンジン

発生したエラー
“`
There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: “class path resource [templates/user/signup.html]”)
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: “class path resource [templates/user/signup.html]”)
at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.par

元記事を表示

javaでログをマージする

コード
“`Java
public class Main {

public static final String BACKUPDIR = “C:\\hoge\\backup”;
public static final String MERGEDDIR = “C:\\hoge\\merged”;
public static List bkDirs;
public static List bkFileNames;

public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ

}

public void filenameListOut() {
// backupフォルダのパスを取得
Path backupDir = Paths.get(BACKUPDIR);

//
bkFileNames = new ArrayList();
// backupフォルダ配下のフォルダ名を

元記事を表示

PowerMockito を Eclipse に設定するための手順

## 手順 1: Eclipse のセットアップ
Eclipse IDE をインストール
Java 17 に対応している Eclipse IDE をインストールします。

Java SDK の設定
Window > Preferences > Java > Installed JREs から、対象のJavaの SDK を Eclipse に追加して選択します。

## 手順 2: プロジェクトの作成
Java プロジェクトを作成
File > New > Java Project を選択し、新しいプロジェクトを作成します。

JUnit と Mockito の依存関係を追加
PowerMockito は JUnit および Mockito を前提としています。JUnit5 または JUnit4 を使用できますが、互換性の観点から、JUnit4 の方がより多くの機能がサポートされているため推奨されます。

## 手順 3: Maven もしくは手動でライブラリの追加
1. Maven を使用する場合:
pom.xml に以下の依存関係を追加します。
“`xml

元記事を表示

PowerMockitoでJavaのJarFileのテストコード書く

PowerMockitoを使用すれば、JarFileのテストをMockitoよりも書きやすくできる場面があります。特に、静的メソッドのモック化やコンストラクタのモック化が必要な場合にPowerMockitoは便利です。JarFileのコンストラクタを直接モックすることができるため、JARファイルのインスタンス作成の部分もモック化して制御しやすくなります。

## PowerMockitoを使うとテストが楽になるケース
#### 1. JarFileのコンストラクタをモックしたい場合
通常のMockitoではクラスのコンストラクタをモックすることができませんが、PowerMockitoならコンストラクタのモックが可能です。

#### 2.JarFileの静的メソッドをモックしたい場合
PowerMockitoでは静的メソッドもモック可能なので、これにより、ファイルシステムに依存しないテストが書きやすくなります。

## PowerMockitoを使ったテスト例
次に、PowerMockitoを使ってJarFileのコンストラクタをモックし、openConnectionメソッドをテストす

元記事を表示

Invalid bound statement (not found) 【Mybatisのエラー・ディレクトリ構成の見直しで解決】

## MyBatisのBindingExceptionエラーに悩んでいる方へ
### マッパーファイルのパス設定に要注意

MyBatisを使用していると、次のようなエラーに遭遇することがある。

“`
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
“`

このエラーにしばらく悩まされていたが、原因は非常にシンプルだった。
単純だからこそ気づくのに時間がかかってしまっている人も多いかもしれない。

また、手動でディレクトリを一つずつ作成しているパターンなどはこの手のエラーで躓きやすいのではないかと感じたため、画像を添付しながら解説記事として残しておく。

## エラーの原因
プロジェクトのディレクトリ構成において、**Javaのパッケージ名に合わせて `resources` フォルダ下にも、同じようにディレクトリを配置する必要**があり、構成が異なるとマッパーが、マッパーファイルの場所が正しく指定されていなかったことが原因であった。

例えば、次のような構造の場

元記事を表示

JavaでPaiza攻略 : 平方分割

## 平方分割
https://paiza.jp/works/mondai/query_primer/query_primer__square_division
Java初学者ですが、こちらの問題を頑張って解きました。
PythonやCでの解説記事はよく見かけるものの、Javaで攻略している記事をあまり見かけない為、記念に残しておこうと思います。

当初、テスト1と4は通るのに、テスト2と3がランタイムエラーになるため、その原因探しに苦しみました。
ブロックごとの計算におけるforループの記述に問題があったわけですが、
気づくまで大変時間がかかった。

### 感想
平方分割というアルゴリズムを初めて知ったので、物凄く勉強になりました。
当初、分割しただけじゃ計算量そこまで変わらないのでは〜?と思っておりましたが、
予め計算済みの配列を用意しておくことで、範囲内の計算をスキップ出来るわけですね。

#### 以下、問題なくパスしたコード。
“` Java:Main.java
import java.util.*;

public class Main{
int[] array

元記事を表示

SpringBoot初学者の備忘録

# はじめに

こんにちは、Gakken LEAP のエンジニアの okamotoです。
普段の業務で使用しているSpring Bootについて、使ってはいるものの仕様や仕組みについて理解ができていない部分が多いと感じたため、基本から学んでみました。
今回はその一歩目として学んだものを備忘録として本記事にのこします。

# Spring Bootの登場

Springフレームワークの中の一つにSpring MVCというMVCモデルに基づいたフレームワークがあり、
それだけでは他のフレームワークを色々組み合わせなければならず、使いづらい部分があった。
(Spring Rooという各種コードの自動生成機能ライブラリで補完することである程度は楽になっていた)

そこで登場したSpring BootはSpring MVCの完成系とされており、上記の二つ+αの組み合わせを完全に上回った利便性がある。

# Spring Bootの利便性とは

とにかく楽である。
どう楽なのかというと、
> 他のフレームワークを色々組み合わせなければならず

↑の部分を設定ファイルにスターターライブラリをちょっと

元記事を表示

PodmanでJava + Spring Boot + MariaDBの環境構築

# はじめに
有料化に伴い、仕事ではDocker以外を使っている方も多いのではないでしょうか?今回の記事では、Dockerと互換性があるPodmanを使って、Java、Spring Boot、MariaDBをセットアップする方法を紹介します。

# 前提条件
– Podmanがインストールされていること
– Pythonとpipがインストールされていること

# 環境構築の流れ
## podman-composeのインストール
最初にpodman-composeをインストールします。podman-composeはPythonで書かれているため、pipを使用します。
“`terminal
pip3 install podman-compose
“`
インストール後に、podman-composeのPathが通っていることを確認します。
“`terminal
which podman-compose
“`
通っていなければ追加します。
“`terminal
echo ‘export PATH=$PATH:/Users/yourusername/Library/Python/3.9

元記事を表示

サーブレットのクライアントからレスポンスを返すまでの流れ

サーブレット(Servlet)は、Javaを用いたサーバーサイドの技術であり、クライアントからのリクエストを受け取り、適切なレスポンスを返す役割を担います。以下に、クライアントからサーブレットにリクエストが送られ、レスポンスが返されるまでの詳細な流れをステップバイステップで説明します。

## 1. クライアントからのリクエスト送信

– **ユーザー操作**: ユーザーがウェブブラウザでURLを入力する、フォームを送信する、リンクをクリックするなどの操作を行います。
– **HTTPリクエストの生成**: これらの操作により、ブラウザはHTTPリクエスト(GET、POSTなど)を生成します。リクエストには、ヘッダー情報や必要に応じてボディ(データ)が含まれます。

## 2. DNS解決とサーバーへの接続

– **DNSルックアップ**: ブラウザは入力されたドメイン名をDNSサーバーに問い合わせ、対応するIPアドレスを取得します。
– **TCP接続の確立**: ブラウザとサーバー間でTCP接続が確立されます。通常、HTTPの場合はポート80、HTTPSの場合はポート443が使用

元記事を表示

複数の自動テスト作成で流用できるコード

# はじめに

今まで自動テストを作成したことは無かったのですが、半年程前から業務で自動テストを作成するようになりました。その際に複数の自動テストで流用している汎用性の高いコードがありましたので、それらをまとめてみようと思いました。

# 1. リストから変数の名前を検索し、見つかった際にアクションする
“`
steps.listTest()
.statusIs(200)
.getResponse()
.as(new TypeRef>() {
})
.stream()
.filter(test -> test.getName().equals(NAME))
.findFirst()
.ifPresent(test -> {
testId = test.getId();
steps.install(testId);
});
“`
###### 解説
Testのリスト

元記事を表示

【Java】指定した開始位置から、指定したバイト数をStringで返す

### ■ 関数定義部分
“`java
public static String Bytes_CUT(String str, int start, int get_length) {
“`
#### 引数

1:str 
byte形式に変換して切り取る文字列全体。

2:start
str の何バイト目から切り取りたいかの指定

3:get_length
start から始めて、何バイトの値を取得したいか

#### コード
“`java

/**
* cut_start から、get_length 分の値を取得する
*/
public static String Bytes_CUT(String str, int start, int get_length) {

// string => byte へ変換
byte[] get_def = str.getBytes(StandardCharsets.UTF_8);

int cut_start = start – 1; // index 考慮用に -1 をした値

元記事を表示

Apache Tika 2.9.2に変更してからparse()メソッドがエラーを出すようになった

# はじめに

Apache Tikaのバージョンを1.85から2.9.2に変更したところ、“nkf –guess“が**ASCII**と判定するWebページのデータを処理しようとしたタイミングで例外が発生するようになりました。

このファイル自体は1998年前後に作成されたもので、HTMLとしてはかなり古い仕様で作成されています。

もう少し調べてみるとUS-ASCII形式であることや古いファイルが問題を引き起すのではなく、文字コードがTika内部で判別できないことによるエラーであることが分かりました。問題はnginxが返すようなデフォルトのエラページでも発生します。

もう少し原因を探るとexec-maven-pluginを利用すると問題は発生しません。問題はJARファイルを利用した時に発生していてApache Tika 2.7.0までは問題なく動作し、2.8.0〜2.9.1までは **maven-assembly-plugin** で作成した *-jar-with-dependencies.jar ファイルを利用すると問題なく処理できることが分かり、2.9.2ではどうやって

元記事を表示

SSLHandshakeException、createSSLExceptionが発生。何が原因で発生?

SSLHandshakeExceptionやcreateSSLExceptionは、SSL/TLS接続を確立する際に何らかの問題が発生したときに発生する例外です。このエラーは、一般的に次の原因で発生することがあります。

## 1. 証明書がKeystoreにインポートされていない
SSL/TLS接続を行う際、サーバーは証明書を使ってクライアントに自身のアイデンティティを証明します。もしクライアントがサーバーの証明書を信頼できない場合(つまり、その証明書がクライアントの信頼されたKeystoreに含まれていない場合)、SSLハンドシェイクに失敗し、SSLHandshakeExceptionが発生します。

#### 発生の理由:

サーバーの証明書がクライアント側のKeystoreにインポートされていないため、クライアントはサーバーの証明書を信頼できないと判断する。
#### 解決策:

サーバーの証明書を取得し、クライアント側のKeystoreにインポートする必要があります。
インポート方法の例(LinuxまたはMac OS):
“`bash
keytool -import -tr

元記事を表示

Eclipseで環境セットメモ

## はじめに
Javaの環境セットですが、Java初心者が熟練者には当たり前のことでも色々迷って進めることができない状況がありましたのでメモを残しておきます。

## workspaceの位置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176603/e1fc72c9-4336-5fcb-f52c-4987fdb743e7.png)

**workspace**フォルダがEclipseや他の関連フォルダと同じ階層にあることは、一般的なデフォルトの設定と考えて問題ありません。

Eclipseのデフォルト設定では、以下のような構造がよく見られます:

– Eclipseのインストールフォルダ内や同じ階層に**workspace**フォルダが作成される。
– この**workspace**フォルダには、プロジェクトのメタデータや設定情報、プロジェクトフォルダ自体が保存されます。

ただし、Eclipseをインストールした際に、ワークスペースの保存場所をカスタマイズすることもできます。その

元記事を表示

@Autowiredを、非推奨の形で使っていたらしい。

## はじめに

何気なく使っていた **@Autowired**アノテーションですが、どうやら非推奨の使い方をしていたみたいなので、アウトプットも兼ねて残せたらと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
エントリーなど初学者の方

## そもそもAutowiredとは

SpringのDIコンテナから、インスタンスを注入するための目印みたいなもの。
ざっくり言うと、使いたいクラスのインスタンス化をしてくれるイメージ。

実際にはこんな感じ。

“`java
public class RamenController{

@Autowired
private RamenService ramenService;

@RequestMapping(“/ramenSearch”)
public String searchRamen(Integer RamenId) {

List ramenList = ramenService.findRamenByRamenId(Rame

元記事を表示

Stream API について理解を深める

# Stream APIとは
JavaのStream APIは、コレクション(リスト、セット、マップなど)のデータ操作を簡潔かつ効率的に行うための機能です。Java 8で導入され、“データ処理をより宣言的(何をするかに焦点を当てる)“に記述できるようにします。これにより、コレクション操作のためのコードが短くなり、読みやすくなります。

![napkin-selection (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3690843/a153eaa8-c96d-1ab5-28a1-79c91b72e9bb.png)

# Stream APIの基本概念
`Stream:` データのシーケンスを表し、要素に対してさまざまな操作(フィルタリング、変換、集約など)を行うためのインターフェース。
`中間操作:` ストリームの要素を変換する操作。結果として新しいストリームを返します(例: map, filter, sorted)。
`終端操作: `ストリームの処理を終了し、結果を返す操作。ストリーム

元記事を表示

AWS SDK for JavaでS3オブジェクトの一覧を取得する2つの方法

## 課題

AWS SDK for Javaで、S3オブジェクトの一覧を取得する機能を利用するとき、日本語でまとまった情報を入手するのに苦労しました。

## 解決方針

どのようにSDKを利用したか、この記事にまとめます。

## 方法

### 前提

– Javaバージョン: 17
– AWS SDKバージョン: v2

### 共通の注意点

– 1回のリクエストで、すべてのオブジェクトが取得されるとは限りません。
– 取得したオブジェクト一覧を格納したクラスには、以下の情報が含まれます。
– a. 取得しきれなかったオブジェクトがあるか否か
– b. 取得したオブジェクト一覧末尾の、次のオブジェクトを示すトークン
– 取得しきれなかったオブジェクトを取得する際に、このトークンが示す位置から取得を開始します。

### バージョニングが無効のとき

`software.amazon.awssdk.services.s3.model.ListObjectsV2Request`クラスを利用します。

一例として、以下の`getAllS3Conten

元記事を表示

【Java】Iteratorを紐解いてみた

## はじめに

実装中、リスト内で条件に合致する要素のみを削除したい、という実装を行う際、chatGPTから、for文よりもIteratorを使用した方が良い、と指摘を受けました。
Iteratorについてはなんとなく聞いたことがありましたが、色々調べてみると、反復処理内で要素削除を行いたい場合において非常に有用であり、興味深かったのでまとめてみました。

※誤りありましたら、ご指摘いただけますと幸いです。

## Iteratorとは

IteratorはJavaのインタフェースでありで、Javaにおいてコレクションの要素を順次処理するために使用されるインタフェースです。
主に java.util パッケージに含まれており、コレクション(リスト、セットなど)の要素にアクセスする際に役立つかと思います。

特定の要素に直接アクセスするのではなく、要素を1つずつ順に取得できるという点がポイントです。

[インタフェース Iterator](https://docs.oracle.com/javase/jp/11/docs/api/ja

元記事を表示

Java メソッドの基本(抜粋)

## 基礎(一部抜粋)
### メソッドの呼び出し方(自クラス)
– staticがついているメソッドからは、staticがついていないメソッドは呼び出せない
– staticではないメソッドは「インスタンスメソッド(動的なメソッド)」とも言う
そのため、インスタンス化する必要がある
1.クラスのインスタンスを作る
“`
例)
Main a = new Main();
“`
2.クラスのインスタンスを使ってメソッドを呼び出す
“`
例)aクラスにprintHelloインスタンスメソッドがあるとする
a.printHello();
“`
### メソッドの呼び出し方(他クラス)
– staticなメソッドからstaticなメソッドを呼び出す場合は
「クラス名.メソッド名」
– staticなメソッドからstaticでないメソッドをメソッドを呼び出す場合は
1.インスタンス作成
“`
例)
Other other = new Other();
“`
2.インスタンスを使ってメソッド呼び出し
“`
例)otherクラスにprintHelloインスタンスメソッドがあるとする

元記事を表示

OTHERカテゴリの最新記事