import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.util.Enumeration;import javax.comm.*;public class MyCom { static SerialPort serialPort; static OutputStream outputStream; static String messageString = " "; public static void main(String[] args) { Enumeration en = CommPortIdentifier.getPortIdentifiers();//查询电脑所有串口 CommPortIdentifier portId; while(en.hasMoreElements()){ portId = (CommPortIdentifier) en.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){ System.out.println(portId.getName()); if (portId.getName().equalsIgnoreCase("COM57")) { try{ /* open方法打开通讯端口,获得一个CommPort对象。它使程序独占端口。如果端口正被其他应用程序占用,将使用 CommPortOwnershipListener事件机制,传递一个PORT_OWNERSHIP_REQUESTED事件。每个端口都关联一个 InputStream和一个OutputStream。如果端口是用open方法打开的,那么任何的getInputStream都将返回相同的数据 流对象,除非有close被调用。有两个参数,第一个为应用程序名;第二个参数是在端口打开时阻塞等待的毫秒数。 */ serialPort = (SerialPort) portId.open("Write", 2000) ; /* 设置串口初始化参数, 依次是波特率 数据位 停止位和校验 */ serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); outputStream = serialPort.getOutputStream() ; /*解决中文乱码 * 拿一个OutputStreamWriter包在OutputStream的底层流外面,设置GBK编码 * 已有一个OutputStream实例outputStream */ OutputStreamWriter writer = new OutputStreamWriter(outputStream, "GBK"); byte []cmd = new byte[3]; cmd[0] = 0x1B; cmd[1] = 'R'; cmd[2] = 15; byte []cmd1 = new byte[3]; cmd1[0] = 27; cmd1[1] = 33; cmd1[2] = 8; outputStream.write(cmd); outputStream.write(10); writer.write("你好"); outputStream.write(28); outputStream.write(38); outputStream.write(10); writer.write("你好啊"); outputStream.write(27); outputStream.write(74); outputStream.write(200); outputStream.write(10); writer.close(); outputStream.close() ; serialPort.close() ; }catch (PortInUseException e) { System.out.println("COM正被使用!") ; e.printStackTrace() ; } catch (IOException e) { System.out.println("获取输出流失败"); e.printStackTrace(); } catch (UnsupportedCommOperationException e) { System.out.println("串行口初始化异常"); e.printStackTrace(); } } } } }}