Как читать /dev/input/eventX с помощью JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Как читать /dev/input/eventX с помощью Java

Сообщение Anonymous »

Я пытаюсь прочитать события ввода в Linux. Я безуспешно пытался использовать WatchService, а затем перешел на Apache Commons IO, также безуспешно. Я полагаю, что эти символьные устройства не генерируют события файловой системы, которые улавливает любой из этих двух механизмов?
import java.io.File;
import java.io.PrintStream;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;

import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;

public class App
{
public static void main(String[] args) throws Exception
{
File file = new File("/dev/tty0");
FileOutputStream output = new FileOutputStream(file);
PrintStream stream = new PrintStream(output, true, StandardCharsets.UTF_8);
System.setOut(stream);
System.setErr(stream);

FileAlterationObserver observer = new FileAlterationObserver("/dev/input");
FileAlterationMonitor monitor = new FileAlterationMonitor(1000l);
FileAlterationListener listener = new FileAlterationListenerAdaptor()
{
@Override
public void onFileCreate(File file)
{
System.out.println(file);
try{Thread.sleep(2000);}catch(Exception e){}
System.exit(0);
}

@Override
public void onFileDelete(File file)
{
System.out.println(file);
try{Thread.sleep(2000);}catch(Exception e){}
System.exit(0);
}

@Override
public void onFileChange(File file)
{
System.out.println(file);
try{Thread.sleep(2000);}catch(Exception e){}
System.exit(0);
}
};
observer.addListener(listener);
monitor.addObserver(observer);
monitor.start();
}
}

Этот код не генерирует выходные данные в /dev/tty0. Мой следующий шаг — попытаться прочитать символьное устройство /dev/input/js0, как предложено здесь. Я понял, что символьное устройство можно читать как в блокирующем, так и в неблокирующем режиме. Однако я не уверен, с чего начать. Включает ли это периодическое открытие/закрытие потока и какой-то интервал опроса? Поток всегда остается открытым и помещается, а его последующие операции помещаются в отдельный выполняющийся поток?
P.S. Неудачная попытка с WatchService:
Path evdev = Paths.get("/dev/input");
WatchService service = FileSystems.getDefault().newWatchService();
evdev.register(service, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
while(true)
{
WatchKey key = service.take();
for(WatchEvent event : key.pollEvents())
{
System.out.println(event.context());
try{Thread.sleep(2000);}catch(Exception e){};
System.exit(0);
}
key.reset();
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... -with-java

Вернуться в «JAVA»