Java 实现NFC 数据写入和读取

NFC(近场通信)是一种短距离无线通信技术,允许设备之间进行近距离通信。在Java中,我们可以使用javax.smartcardio包来实现NFC数据的写入和读取。

NFC 数据写入

要实现NFC数据的写入,我们需要先获取NFC卡并建立与之的连接,然后向卡片发送APDU命令进行写入操作。

下面是一个使用Java实现NFC数据写入的示例代码:

import javax.smartcardio.*;

public class NFCWriter {
    public static void main(String[] args) {
        try {
            // 获取NFC读卡器
            TerminalFactory terminalFactory = TerminalFactory.getDefault();
            CardTerminals cardTerminals = terminalFactory.terminals();
            CardTerminal cardTerminal = cardTerminals.list().get(0);

            // 连接NFC卡
            Card card = cardTerminal.connect("*");

            // 获取卡片通道
            CardChannel cardChannel = card.getBasicChannel();

            // 构造写入APDU命令
            byte[] writeCommand = new byte[]{(byte) 0xFF, (byte) 0xD6, (byte) 0x00, (byte) 0x04,
                    (byte) 0x04, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF};

            // 发送APDU命令进行写入操作
            byte[] response = cardChannel.transmit(new CommandAPDU(writeCommand));

            // 关闭连接
            card.disconnect(false);

            System.out.println("数据写入成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先通过TerminalFactory获取默认的NFC读卡器,然后使用CardTerminal建立与NFC卡的连接。接下来,我们获取卡片通道,构造写入APDU命令并发送该命令进行写入操作。最后,我们关闭与NFC卡的连接。

NFC 数据读取

要实现NFC数据的读取,我们需要同样获取NFC卡并建立与之的连接,然后向卡片发送APDU命令进行读取操作。

下面是一个使用Java实现NFC数据读取的示例代码:

import javax.smartcardio.*;

public class NFCReader {
    public static void main(String[] args) {
        try {
            // 获取NFC读卡器
            TerminalFactory terminalFactory = TerminalFactory.getDefault();
            CardTerminals cardTerminals = terminalFactory.terminals();
            CardTerminal cardTerminal = cardTerminals.list().get(0);

            // 连接NFC卡
            Card card = cardTerminal.connect("*");

            // 获取卡片通道
            CardChannel cardChannel = card.getBasicChannel();

            // 构造读取APDU命令
            byte[] readCommand = new byte[]{(byte) 0xFF, (byte) 0xB0, (byte) 0x00, (byte) 0x04, (byte) 0x10};

            // 发送APDU命令进行读取操作
            byte[] response = cardChannel.transmit(new CommandAPDU(readCommand));

            // 解析响应数据
            byte[] data = response.clone();

            // 关闭连接
            card.disconnect(false);

            System.out.println("读取到的数据:" + new String(data));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们同样通过TerminalFactory获取默认的NFC读卡器,然后使用CardTerminal建立与NFC卡的连接。接下来,我们获取卡片通道,构造读取APDU命令并发送该命令进行读取操作。最后,我们关闭与NFC卡的连接,并解析响应数据。

甘特图

下面是一个使用mermaid语法绘制的NFC数据写入和读取的甘特图:

gantt
    title NFC 数据写入和读取

    section 写入
    建立连接        : 2022-01-01, 1d
    发送写入命令    : 2022-01-02, 1d
    关闭连接        : 2022-01-03, 1d

    section 读取
    建立连接        : 2022-01-04, 1d
    发送读取命令    : 2022-01-