从java中的linux device char文件中读取字节

时间:2018-04-28 07:03:32

标签: java arm embedded-linux angstrom-linux

我正在编写一个可以在Angstrom Linux,ARM平台的控制单元上运行的java软件。该软件必须从/ 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)

1 个答案:

答案 0 :(得分:0)

也许尝试显式读取单个数据字节(相反,将输入视为字符串,可能是某些读者的情况):

DataInputStream input = new DataInputStream(new BufferedInputStream(
    new FileInputStream("/dev/gsm_status")
));

byte b = input.readByte();