【Java入門】掲示板アプリの作り方完全ガイド|投稿・表示・保存まで丁寧解説

プログラミング

「Javaの勉強をしているけれど、何を作ればいいのか分からない」
「実際に動くアプリを作って自信をつけたい」
そんな悩みを抱える方にぴったりなのが、掲示板アプリの自作です。

このアプリでは、投稿・一覧表示・保存・読み込みといった基本機能を通じて、
Javaのクラス設計・ファイル操作・リスト処理・文字列操作などをまんべんなく学ぶことができます。

この記事では、初心者でも作れるシンプルな掲示板アプリの作成手順を、コード付きでていねいに解説していきます。


掲示板アプリとは?

誰でも作れて応用もしやすい学習課題です

結論:掲示板は「入力→保存→表示」という基本構造が学べる最高の教材です。

投稿機能と一覧表示、そしてファイルへの保存・読み込みという流れを経験することで、
Javaの基礎を自然と身につけることができます。

文部科学省の「情報活用能力」の育成方針でも、情報の蓄積・共有・活用の仕組みの理解が推奨されています。
(出典:https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm)


掲示板アプリの機能設計を考える

必要な機能はたった3つです

結論:以下の基本機能だけで十分学べて動く掲示板が完成します。

  • 投稿(名前とメッセージを入力して追加)
  • 一覧表示(過去の投稿を表示)
  • 保存・読み込み(投稿内容をファイルに記録)

クラス構造は次の通り:

1
2
3
Post.java            // 投稿1件を表すクラス
BulletinBoard.java   // 投稿全体を扱うメインクラス
posts.txt            // 保存用テキストファイル

Postクラスの作成

名前・メッセージ・日時を保持する構造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
 
public class Post {
    private String name;
    private String message;
    private String timestamp;
 
    public Post(String name, String message) {
        this.name = name;
        this.message = message;
        this.timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
    }
 
    public String toText() {
        return "[" + timestamp + "] " + name + ": " + message;
    }
 
    public String toDataLine() {
        return name + "##" + message + "##" + timestamp;
    }
 
    public static Post fromDataLine(String line) {
        String[] parts = line.split("##");
        if (parts.length != 3) return null;
        Post p = new Post(parts[0], parts[1]);
        p.timestamp = parts[2];
        return p;
    }
}

メインクラス:BulletinBoardの実装

投稿・表示・保存機能をまとめて構築

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.io.*;
import java.util.*;
 
public class BulletinBoard {
    private static final String FILE = "posts.txt";
    private static List<Post> posts = new ArrayList<>();
 
    public static void main(String[] args) {
        loadPosts();
 
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("\n--- 掲示板 ---");
            System.out.println("1. 投稿する");
            System.out.println("2. 一覧を見る");
            System.out.println("0. 終了");
            System.out.print("選択:");
 
            String input = sc.nextLine();
            switch (input) {
                case "1":
                    System.out.print("名前:");
                    String name = sc.nextLine();
                    System.out.print("メッセージ:");
                    String msg = sc.nextLine();
                    Post newPost = new Post(name, msg);
                    posts.add(newPost);
                    savePosts();
                    System.out.println("投稿しました!");
                    break;
                case "2":
                    System.out.println("\n--- 投稿一覧 ---");
                    for (Post p : posts) {
                        System.out.println(p.toText());
                    }
                    break;
                case "0":
                    System.out.println("終了します。");
                    return;
                default:
                    System.out.println("無効な入力です。");
            }
        }
    }
 
    private static void savePosts() {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE))) {
            for (Post p : posts) {
                writer.write(p.toDataLine());
                writer.newLine();
            }
        } catch (IOException e) {
            System.out.println("保存に失敗しました。");
        }
    }
 
    private static void loadPosts() {
        File file = new File(FILE);
        if (!file.exists()) return;
 
        try (BufferedReader reader = new BufferedReader(new FileReader(FILE))) {
            String line;
            while ((line = reader.readLine()) != null) {
                Post p = Post.fromDataLine(line);
                if (p != null) posts.add(p);
            }
        } catch (IOException e) {
            System.out.println("読み込みに失敗しました。");
        }
    }
}

よくあるエラーとその対策

ファイル関連と入力まわりの注意点

  • 改行や空白の扱いに注意
  • 保存時は文字コード(UTF-8)を統一
  • 投稿が表示されないときは split()null チェックを確認

応用アイデアでレベルアップ

GUIやキーワード検索も追加できます

  • SwingでGUI掲示板に変身
  • 投稿にIDをつけて削除機能を追加
  • キーワード検索(部分一致)や投稿日時の並べ替え

完成形コードまとめと構成

  • Post.java:投稿のデータ管理クラス
  • BulletinBoard.java:投稿・一覧表示・保存処理
  • posts.txt:実際に投稿が保存されるテキストファイル

まとめ:掲示板でJavaの基本をすべて学べる

この記事では、Javaで作る掲示板アプリの作成方法を解説しました。

身につく力:

  • クラスとメソッドの役割分担
  • リスト処理とデータの永続化(保存)
  • 実用的なファイル操作と整形出力

このアプリを自分流にアレンジして、「世界で一つだけの掲示板」に育てていきましょう!

タイトルとURLをコピーしました