1

こんにちは、stackoverflow です。今日は、Minecraft サーバー用のファイル リーダーをコーディングしています。ファイルを介したバンクフィノストレージの一種を使用しました。mysql に変更したため、ユーザーが持っていた量を取得するには、1 つのファイルを読み取る必要があります。リーダーのコードは次のとおりです。

メインファイル:

import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class BankReader {

    /**
     * @param args
     */
    public static void main(String[] args) {
        if(args.length == 0){
            System.out.println("\n" +
                    "\n" +
                    "   Mangler parameters.\n" +
                    "   Usage: buildnorgebankreader [username]" +
                    "\n" +
                    "");
        } else {
            // Find file
            File f = new File("C:"+File.separator+"users"+File.separator
                    +"Hultberg"+File.separator+"Documents"+File.separator
                    +"E fra laptop"+File.separator+"bukkit"+File.separator
                    +"testserver"+File.separator+"bank", args[0]);
            if(!f.exists()){
                System.out.println("\n" +
                        "\n" +
                        "   fant ikke brukeren '"+args[0]+"' sin bank fil\n" +
                        "\n" +
                        "");
            } else {
                // Try read
                try {
                    BankData bank = (BankData)load(f);
                    System.out.println("På konto: "+bank.getBankAmount());
                } catch (Exception e) {
                    System.out.println("\n" +
                            "\n" +
                            "   kunne ikke lese brukeren '"+args[0]+"' sin bank fil\n" +
                            "\n" +
                            "");
                    e.printStackTrace();
                }
            }
        }
    }

    public static Object load(File binFile) throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(binFile));
        Object result = ois.readObject();
        ois.close();
        return result;
    }

}

BankData.java:

import java.io.Serializable;

public class BankData implements Serializable {

    private static final long serialVersionUID = -8106402506199069298L;
    private int bankamount = 0;

    public int getBankAmount() {
        return bankamount;
    }

    public void setBankAmount(int value) {
        bankamount = value;
    }

}

これらのファイルの保存方法:

save(this.bankhandler.get(player.getName()), new File (this.plugin.getDataFolder() + "/bank/", player.getName());

public static void save(Object obj, File binFile) throws Exception {
    ObjectOutputStream oops = new ObjectOutputStream(new FileOutputStream(binFile));
    oops.writeObject(obj);
    oops.flush();
    oops.close();
}

この行:

this.bankhandler.get(player.getName())

プレーヤーの BankData インスタンスを返します。

はい、保存されたファイルの使用には、この BankData と同じ serialversionUID があり、例外がスローされます。

java.io.StreamCorruptedException: invalid type code: 00
        at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(Unknow
n Source)
        at java.io.ObjectInputStream$BlockDataInputStream.refill(Unknown Source)

        at java.io.ObjectInputStream$BlockDataInputStream.skipBlockData(Unknown
Source)
        at java.io.ObjectInputStream.skipCustomData(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at no.buildnorge.hultberg96.BankReader.BankReader.load(BankReader.java:5
1)
        at no.buildnorge.hultberg96.BankReader.BankReader.main(BankReader.java:3
5)

あぁ、エドヴィン。

4

0 に答える 0