从 java 中的 linux 设备字符文件中读取字节
Read byte from linux device char file in java
我正在编写一个 java 软件,它可以在带有 Angstrom Linux、ARM 平台的控制单元上运行。此软件必须从 /dev/gsm_status 文件中读取 gsm 调制解调器的状态,并知道调制解调器是打开还是关闭。
这个文件是一个字符文件,到目前为止我已经用 bash
命令从这个文件中读取了值
dd if=/dev/gsm_status count=1 bs=1 2>/dev/null | hexdump -e '1/1 "%X\n"'
这样显示的值为0或1。
但我无法通过 java 读取文件,我尝试了 RandomAccessFile 和 FileInputStream,但我总是收到 IO 异常。
我认为我的做法完全错误,你能给我一些指示吗?
非常感谢大家
更新
这是java代码
RandomAccessFile f = new RandomAccessFile(fileDevGsmPowerStatus.getAbsoluteFile(), "r");
f.seek(0);
System.out.println("--" + f.readChar()+"--");
这是 RandomAccessFile 的错误,FileInpuntStream 也是如此
java.io.IOException: Input/output error
at java.io.RandomAccessFile.read(Native Method)
at java.io.RandomAccessFile.readChar(RandomAccessFile.java:743)
at winger.fuelfeed.client.abt21.gsm.CinterionBGS2.getModemPowerState(CinterionBGS2.java:207)
at winger.fuelfeed.client.FuelfeefClient.main(FuelfeefClient.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
也许尝试显式读取单个字节的数据(而不是像某些读者那样将输入视为字符串):
DataInputStream input = new DataInputStream(new BufferedInputStream(
new FileInputStream("/dev/gsm_status")
));
byte b = input.readByte();
我正在编写一个 java 软件,它可以在带有 Angstrom Linux、ARM 平台的控制单元上运行。此软件必须从 /dev/gsm_status 文件中读取 gsm 调制解调器的状态,并知道调制解调器是打开还是关闭。
这个文件是一个字符文件,到目前为止我已经用 bash
命令从这个文件中读取了值dd if=/dev/gsm_status count=1 bs=1 2>/dev/null | hexdump -e '1/1 "%X\n"'
这样显示的值为0或1。
但我无法通过 java 读取文件,我尝试了 RandomAccessFile 和 FileInputStream,但我总是收到 IO 异常。
我认为我的做法完全错误,你能给我一些指示吗?
非常感谢大家
更新
这是java代码
RandomAccessFile f = new RandomAccessFile(fileDevGsmPowerStatus.getAbsoluteFile(), "r");
f.seek(0);
System.out.println("--" + f.readChar()+"--");
这是 RandomAccessFile 的错误,FileInpuntStream 也是如此
java.io.IOException: Input/output error
at java.io.RandomAccessFile.read(Native Method)
at java.io.RandomAccessFile.readChar(RandomAccessFile.java:743)
at winger.fuelfeed.client.abt21.gsm.CinterionBGS2.getModemPowerState(CinterionBGS2.java:207)
at winger.fuelfeed.client.FuelfeefClient.main(FuelfeefClient.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
也许尝试显式读取单个字节的数据(而不是像某些读者那样将输入视为字符串):
DataInputStream input = new DataInputStream(new BufferedInputStream(
new FileInputStream("/dev/gsm_status")
));
byte b = input.readByte();